下面这种情况,数组内容是放在程序ROM还是数据ROM?

asqw   2007-6-1 16:47 楼主
const uint8  ST_UpdateData[] =
   {
0x3a, 0x01, 0x2a, 0x04, 0x28, 0x00, 0x29, 0x00, 0x20, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, 0x01, 0x28, 0x02, 0x21, 0x8f, ......0x05, 0xa1, 0x18, 0x04, 0xff, 0xff   };
这个数组大约要占用4K左右的空间。在系统上电后都会执行下面的代码将数组内容通过I2C写到另一个芯片中:
void sta_DownloadUpdate(void)
{   
        unsigned int i;
        i = 0;
    do
     {
          i2c_Write(STA_UpdateData,device1, ST_UpdateData[i+1]);
          
      i+=2;
         }
        while(ST_UpdateData != 0xff);
}
我对这个数组的存放位置不是太清楚,不知道它是和代码一起放在程序ROM还是单独放在数据ROM。
因为这是51系统,51系统是将程序和数据分开放的。我理解应该是在程序ROM,但不敢确定。
请高手指点...

回复评论 (5)

原觉是EEPROM的...

具体数据的存放用什么设备,那是根据你的应用来的...

如果这串数据永远也不用或不能修改,那就放在片内的ROM里,这样可以防读出什么的

如果仅仅是为了保存一些运行期状态值,只为了防掉电,或是其它运行期因素造成的数据修改

那可以用外扩的不掉电ROM器件或设备...


嘿嘿
点赞  2007-6-1 18:35
这串数据是另一个芯片的配置信息,每次系统初始化的时候向芯片写一次,运行中这个数组是没有修改的。假设是放在片内ROM中,代码编写应该不会受影响吧?!
点赞  2007-6-4 08:42
按理说,放在ROM中它的访问指令会有改变.但是用C写的程序,那C编译器会处理这个问题

所以,没事...

你的C代码几乎不受影响,多的就是一个存放位置的声名...
点赞  2007-6-4 08:58
定义在data中,也就是内部RAM中,你如果要定义在程序ROM中,须定义为:
    code const unsigned char  ST_UpdateData[] =
如定义在XDATA中须:
    xdata const unsigned char  ST_UpdateData[] =
点赞  2007-6-5 15:22

6楼 cc1 

const 意思~只读
点赞  2007-6-27 15:44
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复