查看: 2871|回复: 4

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

[复制链接]

该用户从未签到

发表于 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,掉电消失。

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


回复

使用道具 举报

  • TA的每日心情
    奋斗
    2019-11-24 17:07
  • 签到天数: 1771 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-9-24 22:54:25 | 显示全部楼层
    你说的这几个a,b,c都是局部变量存储在数据段,都是在程序运行的时候才产生在RAM中(确切的说“堆”),掉电会丢失。
    如果你想要掉电不丢失而且还能修改的,一般是定义在在EEPROM或者DataFlash里,不会在程序块里。最新的FRAM除外。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-9-12 19:14
  • 签到天数: 1677 天

    连续签到: 1 天

    [LV.Master]伴坛终老

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

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2014-10-6 12:43:06 | 显示全部楼层
    huixianfxt 发表于 2014-9-25 16:03
    首先在单片机中FLASH用于存放代码,属于只读型存储器(ROM)。MSP430的单片机的存储器组织结构采用冯诺依曼 ...

    非常感谢,自己理解错了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-4-25 11:35 , Processed in 0.132633 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.