打印

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

[复制链接]
4989|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yehanbang|  楼主 | 2012-1-30 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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 | 只看该作者
UP

使用特权

评论回复
5
chunyang| | 2012-1-30 23:31 | 只看该作者
一般都放在程序存储器中,然后根据需要由程序调入RAM处理,有些应用需要专门生成的数据段并固化在诸如EEPROM、数据FLASH区等处,但这些数据并非由程序代码直接编译生成的。

使用特权

评论回复
6
yewuyi| | 2012-1-31 10:36 | 只看该作者
你定义的常量会存放到数据段中,操作指令会放到代码段中,一般都固化到ROM中,代码执行的时候,通过读操作,把数据读出来参与操作

使用特权

评论回复
7
sjc_sugar| | 2012-1-31 17:37 | 只看该作者
可以用code data xdata...关键字声明,具体怎么用查资料!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

14

帖子

0

粉丝