关于keil-C51中code、idata以及xdata

keil-c51编译后会输出程序所占用的code、idata以及xdata各自所占用的区段大小,根据自身所选用的51mcu片上资源,以该输出信息为根据,进行程序上的优化与调整

目录

1 - Keil官方的介绍

2 - xdata的使用

3 - hex文件大小与code段大小

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的编译设置中定义这个即可

发布了38 篇原创文章 · 获赞 23 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u013662665/article/details/104100980
今日推荐