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

对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。
感兴趣的朋友可以扫描下方的二维码或者搜索“里先森sements”来关注,欢迎来玩~!
在这里插入图片描述


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值