单片机/MCUwilliam hill官网
直播中

石氏心永

9年用户 47经验值
私信 关注
[问答]

为什么单片机定义的数组是存放在数据存储器中

为什么单片机定义的数组是存放在数据存储器中,而不是存放在程序存储器中,这样断电,那数组里面的数据不就丢失了吗,实在不解,请大神指教。

回帖(5)

dabing89

2016-8-14 16:52:24
你可以放在FLASH里面,加CODE关键字不就行了
1 举报

h1654155924.5395

2016-8-14 17:59:27
uchar code table[]={};
1 举报

keil-uvision4

2016-8-15 00:22:05
就储存的内容来讲,数组可以分为两种:一种是内容在程序运行中会改变的,还有一种内容在程序运行中不会改变的。所以第一种数组符合RAM的特性,就放在RAM中,第二种数组符合ROM的特性,就放在ROM中。

举个例子:
定义一个缓冲区:BYTE Buffer[];那么在程序中就会大量使用Buffer[n] = Variable或Variable = Buffer[n]这样的代码,也就是会对Buffer这个数组进行读写操作,所以放在RAM中。
定义一个字符串:CHAR String[] = "HelloWorld"; 这种方法在串口程序中比较常见,一般只有在UartPrintString(String)的时候才会用到,并没有出现元素的写操作,所以放在ROM中。

在来说一下这样做的原因:RAM既可读,又可写,而ROM只可读,不可写,所以RAM适合存放变量,ROM适合存放常量。

说白了,数组的存放位置主要依据数组的功能,并不是放在ROM中就一定好。
2 举报

chenwei6991627

2016-8-15 09:35:02
就和电脑的RAM和ROM是一个道理,自己想想把
举报

电小龙

2016-8-15 12:21:38
定义数组时加上code就是定义到code区了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分