向各位大佬请教一个有关 data edata hdata const cod的问题
在STM32中编译之后会出现:Program Size: Code=16788 RO-data=400 RW-data=56 ZI-data=7408
Code: 用户写的代码所占用的空间,本质上就是一大堆ARM指令 --------- 内部Flash
RO-data: 只读常量大小(const常量,#define宏常量。) --------- 内部Flash
RW-data: 读写数据段,存放初始化为非0值的全局变量 --------- 内部Flash
ZI-data: 零数据段,存放未初始化的全局变量,以及初始化为0的变量。 --------- 内部Flash
RO Size = (Code-Data+RO-data) 表明程序占用Flash空间的大小
RW Size = (RW-data+ZI-data) 表示运行时占用的RAM的大小
ROW Size = ( Code +RO-data+RW-data) 表示烧写程序所占用的Flash空间的大小
程序运行之前,需要有文件实体被烧录到 STM32 的 Flash 中,一般是 bin 或者 hex 文件,该被烧录文件称为可执行映像文件。
也就是说Flash的占用量就是ROM Size ----- ARM指令代码+只读数据+非0初始化变量的初值
系统上电之后,默认从Flash启动。启动之后会将RW(RW-data+ZI-data)中的RW-data搬运到RAM中(RAM就是内存(运存),ROM就是Flash(硬盘))
也就是说RAM的占用量就是RW Size ---- 非0初始化变量、0初始化RAM(又分为0初始化静态变量区+堆区+栈区)
使用STC32G12K128在keil里面编译之后会出现:Program Size: data=9.4 edata+hdata=480 xdata=192 const=136 code=7566这样的输出
STC32G12K128芯片,是有4K的内部RAM(edata)和8K的内部扩展RAM(xdata)以及128K的FLASH
在8M可寻址的程序空间中,STC32G12K128只用到了FF:FFFF --FE:0000总共128K,其中FF:FFFF -- FF:0000(64K)为Code区域与传统的8051兼容,其中FE:FFFF -- FE:0000(64K)为ecode区域
在8M可寻址的数据空间中,STC32G12K128只使用了00:0000 -- 00:0FFF总共4K的edata和01:0000 -- 01:1FFF总共8K的xdata
回到我们最初的问题中 Program Size: data=9.4 edata+hdata=480 xdata=192 const=136 code=7566 都是什么?
code:应该是我们编写的代码
const:是不是就是只读常量
那xdata、data、edata、hdata都是什么?应该存放在芯片的什么位置呢?有大佬能指点一二吗?
算好存储大小不超的情况下直接关键词指定区域,例如:
u8 xdata reg_value;
u8 data reg_num;
要想简单的话这样子直接用就好了,高端的玩法的话直接指定地址,例如
const unsigned char PLC_ROM _at_ 0xfe0000 = {0};
为啥LEIL251xdata关键字变红Edata不变红。唉,各种不确定的事。 伽马刀 发表于 2023-6-30 12:24
为啥LEIL251xdata关键字变红Edata不变红。唉,各种不确定的事。
可以在配置中自行添加edata字段 之前比赛的时候发现edata段好像掉电不消失,一直没搞懂为什么原因
页:
[1]