Keil MDK4中的Data,Xdata,Code 及 Keil MDK5中的Code, RO-data , RW-data, ZI-data

一 、基础知识
字节  8位
半字  16位
字      32位

二、Keil MDK4中的Data,Xdata,Code
data 内部RAM
xdata 外部RAM
code Flash-程序的大小
 例如:51单片机256kb RAM 分为 128kb data 以及 128kb xdata。

存储类型与存储区关系(扩展):
                                 data       --->     可寻址片内ram
                                 bdata     --->     可位寻址的片内ram
                                 idata      --->     可寻址片内ram,允许访问全部内部ram
                                 pdata     --->       分页寻址片外ram 
                                 xdata     --->       可寻址片外ram 
                                 code      --->       程序存储区 

xdata bool radio_busy;
uint8_t RF_Recv_Flag;
xdata uint8_t tx_payload[60];
xdata uint8_t rx_payload[60];
uint8_t RF_Recv_Flag;
uint16_t PipeAndLen;

 

 


编写这种RAM较小的芯片时,合理分配片内片外RAM空间,否则会出现内存出错。例如将代码改为如下:

xdata bool radio_busy;
uint8_t RF_Recv_Flag;
uint8_t tx_payload[60];//更改
uint8_t rx_payload[60];//更改
uint8_t RF_Recv_Flag;
uint16_t PipeAndLen;
编译框为:(data数据段及内部RAM数据太大,超出芯片容量)

 

 

  

 编译框可了解程序RAM使用情况,以及程序大小。

 

二、Keil MDK5中的Code, RO-data , RW-data, ZI-data

 

 


(1) Code(inc.Data) : 包含两部分,即代码和数据

      Code,即程序代码部分!

(2) RO Data: read-only data,只读的数据。      

      RO是程序中的指令和常量,RO就是readonly。

(3) RW Data: read write data,可读写的数据。

      RW是程序中的已初始化变量,RW就是read/write。

(4) ZI Data: zero initialized data,零初始化的可读写变量。

      ZI是程序中的未初始化变量,ZI就是zero。

keil编译器默认是把你没有初始化的变量都赋值一个0。初始化为零,或者未初始化的变量,都存储于这个区域。

注意:养成良好的编程习惯,定义及赋初值。并不是所有的编程环境都会为未初始化的变量赋值0,有可能是指向未知位置的一个未知值,所带的BUG也是极难查出来的。

 

存储Size:

RO size: Code + RO_data

RW size: RW_data + ZI_data

ROM (minimum)size = Code + RO_data + RW_data (即烧/下载程序到FLASH/ROM时,所占用的最小空间)

Total ROM Size (Code + RO Data + RW Data)这样所写的程序占用的ROM的字节总数,也就是说程序所下载到ROM flash 中的大小。为什么Rom中还要存RW,因为掉电后RAM中所有数据都丢失了,每次上电RAM中的数据是被重新赋值的,每次这些固定的值就是存储在Rom中的,为什么不包含ZI段呢,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。

RAM size: RW Data + ZI Data (即程序运行的时,RAM使用的空间)

以通过.map查看占用的flash和ram大小。

 

 


————————————————
版权声明:本文为CSDN博主「城南花已开..」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27747359/java/article/details/84993056

posted @ 2020-07-16 16:46  watchout  阅读(178)  评论(0)    收藏  举报