jsp网站开发外文翻译,新手如何做网站优化,wordpress js代码插件,连云港专业网站优化一、__main和main()之间的关系
先来对stm32启动过程简单学习
启动文件里面的Reset_Handler#xff1a;
调用过程#xff1a;
stm32在启动后先进入重启中断函数Reset_Handler#xff0c;其中会先后调用SystemInit和__main函数#xff0c;
__main函数属于c库函数…一、__main和main()之间的关系
先来对stm32启动过程简单学习
启动文件里面的Reset_Handler
调用过程
stm32在启动后先进入重启中断函数Reset_Handler其中会先后调用SystemInit和__main函数
__main函数属于c库函数其内部依次进行三步工作即先初始化rw段然后初始化zi段最后调用另一个c库函数__rt_entry()
__rt_entry()该函数先初始化堆栈和库函数然后即调用主函数main()从而进入用户程序。可以看出主函数main()若退出则在__rt_entry()最后会再调用exit()函数进行退出操作。
__main和__rt_entry这俩函数实际上我都没能力进的去我也是找网上大神逆向分析出来的“借鉴”学习一下
总结stm32启动文件里面Reset_Handler最后调用了__main而在__main里面最后调用了__rt_entry()然后__rt_entry()在做完堆栈和库函数初始化工作之后才调用main()。
二、修改主函数名称的方法
Reset_Handler中导入和执行的__main函数换成自己在c文件里随便定义的函数即可比如上图的testmain我现在就是把在c文件里面定义的testmain函数作为主函数来用的。注意这里有个误区有的人可能会将__main换成比如__testmain然后实际自己定义的是testmain这样编译肯定通不过然后就说什么stm32的主函数名改不了。因为__testmain没有定义啊这个和__main不一样main是c的库函数标准库自己包含的它是在内部调用的main()而不是编译过程给它去掉了两个下划线
但由于__main函数除了调用main()以外在前后还有初始化堆栈和库函数、调用exit()的操作而我这里直接把__main函数替换成自己想要运行的函数则不包含那些操作换句话说启动文件前面设置的堆和栈大小都白设置了库里面有的值如果有设置的也白设置了现在都成了默认的值还有exit()里面有啥特别的用处也不了解等于把一个本来该有但未知用途的模块删了这肯定是不行的。因此在stm32平台上尽量还是不要自己擅自修改main函数名称。
Linux main启动参考主函数main和程序入口_start