MDK的stm32启动代码(startup_stm32f10xx_hd.s)中,怎么没有将.data,.bss段(RW,ZI)的数据从flash拷贝到ram中的代码啊?谢谢

2019-07-20 19:42发布

本帖最后由 liuzq71 于 2016-10-3 14:48 编辑

.data对应初始化了的全局变量,编译后将位于可执行文件中,由启动代码负责加载到数据区中(在单片机中这部分数据会存于flash中,需要有启动代码把这部分内容拷贝到sram中),.bss段是没有初始值的全局变量,由启动代码把这部分内容全初始化为0;stm32的启动代码在哪里完成这些搬迁工作的呢?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zmingwang
1楼-- · 2019-07-20 23:22
LDR     R0, =__main
BX      R0
以上这两句是调用C库的__main函数,并不是我们程序里写的main函数,只是C库要求应用程序必须有一个叫main的函数作为程序入口,在__main中被调用.
调试运行,当程序运行到BX R0这句时,按F11跟进,就能够看到__main的实现代码了.
初始化RW和ZI段的工作,就是在__main中做的.
在.s文件最后,有一个__user_initial_stackheap的函数,KEIL的C库给我们也提供了自定义的初始化途径.
aozima
2楼-- · 2019-07-21 00:27
启动代码中
[mw_shl_code=c,true]                 LDR     R0, =__main
                 BX      R0
[/mw_shl_code]

之后 直到 int main(void)

liuzq71
3楼-- · 2019-07-21 04:37
顶顶顶顶
liuzq71
4楼-- · 2019-07-21 07:07
top top

一周热门 更多>