标签:一个 记录 直接 xxx 不能 handler handle main 空间
在学习STM32的时候一直看不明白Startup_stm32f40_41xxx.s这个文件。里边写的每句话好像也能看懂但是就不知道他想干嘛。现在终于有点体会了所以来在这里记录下来,希望能对后来的人有帮助。 AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
可以看到大小是1K的一个栈直接初始化了CPU的SP指针也就是说把栈初始化好了。因为在ARM中SP就是r13随便上网查一下就知道了。
还用STM32的启动代码来说接着就是异常向量表,这个不用管这是硬件规定好的名字你想改也不能改(最多也就是用#define来包装一层),之后就是Reset_Handler这个标签也就可以认为是C中的函数吧。跟着是
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
跳转到SystemInit因为用的是BL所有能返回来,在调用就是我们写的main函数了用bx调用所有就不用返回了。
3、总结一下也就是说一般这种嵌入式或者是单片机的启动代码一般只做时钟初始化、关闭看门狗(可能有的CPU硬件里边已经给你做了)、还有就是初始化栈和堆接着就可以跑你的C程序了。也就是加载bootloder和操作系统什么的吧。
标签:一个 记录 直接 xxx 不能 handler handle main 空间
原文地址:http://blog.51cto.com/13638458/2347681