关于代码段和数据段的问题

[复制链接]
 楼主| yehanbang 发表于 2012-1-30 16:17 | 显示全部楼层 |阅读模式
在c语言编译最终形成的二进制代码中有代码段和数据段,将其下载到单片机后,代码段和数据段哪个应该放在RAM中,哪个应该放在Flash中,有什么讲究吗,还是都可以?
ayb_ice 发表于 2012-1-30 17:02 | 显示全部楼层
还没有入门
john_lee 发表于 2012-1-30 18:34 | 显示全部楼层
本帖最后由 john_lee 于 2012-1-30 21:44 编辑

代码段(.text)和常量(只读)数据段(.rodata)肯定放在flash(ROM)中,可读写数据段肯定放在RAM中,但有一些特殊的地方,可读写数据段一般分为两部分:
  • 已初始化数据段(.data),这个段中的数据在main()运行之前,就要准备好初始值,但RAM上电时并没有这些数据,一般的方法是把这些数据(副本)存放在代码段和常量数据段的后面,由启动程序复制到RAM中,当main()运行时,这些数据就已经是ready了。
  • 未初始化数据段(.bss),这个段中的数据在main()运行之前,也要准备好初始值,按C标准规定,这些数据被初始化为 0 值,这个操作也是由启动程序来进行的。

所以,存储器最终的映像应该是:
flash ROM: .text代码段。
.rodata常量数据段。
.data已初始化数据段副本,由启动代码复制到RAM.data。
RAM:.data已初始化数据段。
.bss未初始化数据段,由启动代码清 0。

评分

参与人数 1威望 +2 收起 理由
原野之狼 + 2 我很赞同

查看全部评分

junwei05 发表于 2012-1-30 18:57 | 显示全部楼层
chunyang 发表于 2012-1-30 23:31 | 显示全部楼层
一般都放在程序存储器中,然后根据需要由程序调入RAM处理,有些应用需要专门生成的数据段并固化在诸如EEPROM、数据FLASH区等处,但这些数据并非由程序代码直接编译生成的。
yewuyi 发表于 2012-1-31 10:36 | 显示全部楼层
你定义的常量会存放到数据段中,操作指令会放到代码段中,一般都固化到ROM中,代码执行的时候,通过读操作,把数据读出来参与操作
sjc_sugar 发表于 2012-1-31 17:37 | 显示全部楼层
可以用code data xdata...关键字声明,具体怎么用查资料!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

10

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部