menghubei 发表于 2014-9-24 22:15:06

关于程序存储器和数据存储器

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

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

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

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

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

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


menghubei 发表于 2014-10-6 12:43:06

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

非常感谢,自己理解错了

huixianfxt 发表于 2014-9-25 16:03:38

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

menghubei 发表于 2014-9-25 10:53:29

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

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

shepherd 发表于 2014-9-24 22:54:25

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

Baidu
map