微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > stm32启动文件的一点疑惑

stm32启动文件的一点疑惑

时间:10-02 整理:3721RD 点击:
分析stm32启动文件:
                LDR     R0, =SystemInit  ;先调用SystemInit  函数
                BLX     R0               
                LDR     R0, =__main ;再初始化用户堆栈
                BX      R0
在没有初始化好堆栈的情况下就直接调用SystemInit  函数,这样怎么还能正常运行呢....?

芯片在制作好了之后有一部分的地址是被占用的,不能存入其他后来内容,这里放的就是MCU的内核指令,例如:x86指令集、x64指令集、sse指令集、mmx指令集等,在硬件系统复位后,这些地址内部存入的指令集就至位好了。而SystemInit  函数只是给这些指令集做一个引用,映射到操作系统里面。而且你看到的只是写成的代码,编译后的代码你并看不见。就如同c编译的程序是先执行include的引用内容还是,先执main里面的内容?

嗯,明白。SystemInit??函数是c语言编写的,编译器会自动完成入栈和出栈处理,无非是使用stmfd、ldmfd指令,这些指令一定要用到栈指针寄存器sp,问题是调用SystemInit??函数时还没有完成栈的设置,那么此时sp中的值是未知的,这样难道不会出错吗?

sp值不一定是未知的,象在51里,sp缺省值好像就是0x07,这个要查sp寄存器在复位后的复位值是多少

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top