6回答

0收藏

STM32系统初始化问题

#开源分享 #开源分享 3798 人阅读 | 6 人回复 | 2013-06-29

今天,在看圆点博士的小四的开源代码。结果发现他的代码里面都没有对STM32的系统进行初始化。指的是SystemInit()。
感觉非常奇怪。
然后咨询博士和群里面的其他网友,在《上海-欧锋》的指点下,原来3.5的固件库已经把系统初始化这个工作放在了.s文件中进行了。系统在复位后,立马执行这个SystemInit(),然后才把权限浇到main()这。

请看v3.5的这段代码:
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WE***]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

而我的为何不行呢,我原本以为我用的也是3.5的固件库,其实不行,我用的是3.0,这个版本没添加这个功能。

谢谢博士,谢谢上海-欧锋。
分享到:
回复

使用道具 举报

回答|共 6 个

倒序浏览

沙发

圆点博士小四轴

发表于 2013-6-29 11:21:11 | 只看该作者

__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;

    因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main 则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;
板凳

zszghzszgh-371253

发表于 2013-6-29 11:25:37 | 只看该作者

很好,学习一下了
地板

菁菁木华-374784

发表于 2013-8-12 19:56:20 | 只看该作者

学习了,学习了,受教了
5#

0z0s0c

发表于 2013-11-21 22:22:14 | 只看该作者

学习学习
6#

蝶舞娇阳

发表于 2013-12-28 10:54:54 | 只看该作者

SystemInit()确实在启动文件中执行了
7#

蝶舞娇阳

发表于 2013-12-28 10:59:07 | 只看该作者

学习了,顶一下
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条