keil-c51编译后会输出程序所占用的code、idata以及xdata各自所占用的区段大小,根据自身所选用的51mcu片上资源,以该输出信息为根据,进行程序上的优化与调整
1 - Keil官方的介绍
http://www.keil.com/support/man/docs/c51/c51_le_memtypes.htm
code - 简要的说就是存储代码,以及被“code”关键字标注的常量数组、变量一同所占用的空间大小,字节单位。
idata - 存储在直接寻址的内部数据存储区的变量所占用的大小。默认状态下声明定义的变量存储在idata段,部分常见的51内核单片机,其idata最大限制为128字节。
xdata - 存储在拓展数据存储区的变量所占用的大小,这里不翻译为外部便于理解。xdata既可以是外部拓展的sram片,也可以是片内内置的sram。像部分厂家的51内核单片机,其上内置了片内的sram作为xdata可访问的区域。
2 - xdata的使用
在部分使用场景中,仅仅使用有限的idata段是存储不下程序中所需要的变量,这时若使用的板子内置或外拓了sram,则可以使用xdata关键字将部分变量移动至拓展sram中存储。视你的sram是内置sram还是外置sram,在keil的设置窗口中勾选 "use onchip xdata"。
3 - hex文件大小与code段大小
编译完成后,生成的hex文件大小并不表示程序中其code段所占用的大小。编译完毕后,参照keil报表中code代表程序段大小,idata代表内部ram大小,xdata代表拓展ram大小