OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7221|回复: 5

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

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-9-23
在线时间
37 小时
发表于 2016-10-3 12:31:33 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 liuzq71 于 2016-10-3 14:48 编辑

.data对应初始化了的全局变量,编译后将位于可执行文件中,由启动代码负责加载到数据区中(在单片机中这部分数据会存于flash中,需要有启动代码把这部分内容拷贝到sram中),.bss段是没有初始值的全局变量,由启动代码把这部分内容全初始化为0;stm32的启动代码在哪里完成这些搬迁工作的呢?谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-10-7 12:12:25 | 显示全部楼层
LDR     R0, =__main
BX      R0
以上这两句是调用C库的__main函数,并不是我们程序里写的main函数,只是C库要求应用程序必须有一个叫main的函数作为程序入口,在__main中被调用.
调试运行,当程序运行到BX R0这句时,按F11跟进,就能够看到__main的实现代码了.
初始化RW和ZI段的工作,就是在__main中做的.
在.s文件最后,有一个__user_initial_stackheap的函数,KEIL的C库给我们也提供了自定义的初始化途径.
回复 支持 2 反对 0

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3708
金钱
3708
注册时间
2011-5-23
在线时间
2010 小时
发表于 2016-10-3 12:43:29 | 显示全部楼层
启动代码中
[mw_shl_code=c,true]                 LDR     R0, =__main
                 BX      R0
[/mw_shl_code]

之后 直到 int main(void)

RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-9-23
在线时间
37 小时
 楼主| 发表于 2016-10-4 20:26:22 | 显示全部楼层
顶顶顶顶
回复 支持 反对

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-9-23
在线时间
37 小时
 楼主| 发表于 2016-10-7 11:49:32 来自手机 | 显示全部楼层
top top
回复 支持 反对

使用道具 举报

13

主题

66

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-1-9
在线时间
41 小时
发表于 2021-8-11 12:50:58 | 显示全部楼层
终于得到答案了,我也在照这个问题,谢谢,太有用了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 05:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表