4回答

0收藏

[求助] 关于程序存储器和数据存储器

TI TI 3793 人阅读 | 4 人回复 | 2014-09-24

我们编写好一段代码后,IAR编译链接后生成hex文件,考入430的Flash中,但是430Flash分程序存储和数据存储块。

所以我有个问题是,我们程序中哪些部分放入程序存储块,哪些放入数据存储块?

比如:
############
int a = 10;
int b = 6;
int c;

c = a*b;
##############
这段代码,是否将定义的a,b常量存入数据块,而执行乘法的代码指令编译后存入程序块。

看了有些网上写,程序段是rom,是掉电保存的,而数据段相当于ram,掉电消失。

菜鸟级的问题,希望大家能帮忙解答下。


分享到:
回复

使用道具 举报

回答|共 4 个

倒序浏览

沙发

shepherd

发表于 2014-9-24 22:54:25 | 只看该作者

你说的这几个a,b,c都是局部变量存储在数据段,都是在程序运行的时候才产生在RAM中(确切的说“堆”),掉电会丢失。
如果你想要掉电不丢失而且还能修改的,一般是定义在在EEPROM或者DataFlash里,不会在程序块里。最新的FRAM除外。
板凳

menghubei

发表于 2014-9-25 10:53:29 | 只看该作者

shepherd 发表于 2014-9-24 22:54
你说的这几个a,b,c都是局部变量存储在数据段,都是在程序运行的时候才产生在RAM中(确切的说“堆”),掉电 ...

哦,大概懂了。就是说程序编译好后,分成了程序段和数据段,程序中的数据变量、常量都是存储在数据段,而其他部分存放在程序段。数据段和程序段都是在Flash中么?
地板

huixianfxt

发表于 2014-9-25 16:03:38 | 只看该作者

首先在单片机中FLASH用于存放代码,属于只读型存储器(ROM)。MSP430的单片机的存储器组织结构采用冯诺依曼结构:没有代码空间和数据空间之分,ROM和RAM都统一编址在同一寻址空间内。包括寄存器与数据变量、堆栈等都属于RAM;FLASH区用来存放程序代码。对于C编译器来说,会自动将各种变量、中间结果、堆栈存放在RAM。const用来定义常量,const定义的常量被放在ROM。C语言main函数开始运行之前,都会将所有RAM清零,使用__no _init 可以定义无需初始化的变量(初始化过程中不会被清零)。
5#

menghubei

发表于 2014-10-6 12:43:06 | 只看该作者

huixianfxt 发表于 2014-9-25 16:03
首先在单片机中FLASH用于存放代码,属于只读型存储器(ROM)。MSP430的单片机的存储器组织结构采用冯诺依曼 ...

非常感谢,自己理解错了
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条