对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。
感兴趣的朋友可以扫描下方的二维码或者搜索“里先森sements”来关注,欢迎来玩~!
keil-c51编译后会输出程序所占用的code、idata以及xdata各自所占用的区段大小,根据自身所选用的51mcu片上资源,以该输出信息为根据,进行程序上的优化与调整
目录
X - 附录:如何在其他编辑器中编写keil-C51程序避免关键词报错
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 On-chip XRAM"。
3 - hex文件大小与code段大小
编译完成后,生成的hex文件大小并不表示程序中其code段所占用的大小。编译完毕后,参照keil报表中code代表程序段大小,idata代表内部ram大小,xdata代表拓展ram大小
X - 附录:如何在其他编辑器中编写keil-C51程序避免关键词报错
这个其实可以算一种小技巧,例如在使用vscode进行代码编辑的时候,编辑器虽然可以正常的提示通用的C风格关键字,但是遇到类似 “code” 以及 “xdata” 这类keil-C51特有关键字时,会提示报错,影响后续代码部分的自动提示功能。这里可以用简单的宏定义方式避免出现这个问题。
可以在代码公用头文件中添加以下宏定义:
#ifndef KEILMACRO //避免vscode报错
#define xdata
#define sfr char
#define sbit char
#define code
#endif
这里定义了一个 “KEILLMACRO” 我们只需要在keil的编译设置中定义这个即可