历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2021年10月28日 | keil c51中的data idata xdata code详解

发布者:数字冲浪 来源: eefocus关键字:keil  c51  data  idata  xdata  code 手机看文章 扫描二维码
随时随地手机看文章

51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线(本文称其为总线域,简称域)上定义不同的变量。在keilc51中定义了data idata xdata code几种域修饰符。这些修饰符决定了变量访问方式。


data:用mov直接访问的内部RAM

idata:用mov @间接访问的内部RAM

xdata:用movx访问的外部RAM

code:用movc访问的rom

这些假定以上以及类型为where。数据类型为type。



干货:

变量(包括指针)默认存储在data中。指针能够智能的指向所有的域。

指定变量(包括指针)在某个域时,域修饰符写在变量类型后面。type where value,type* where point。


想让指针只能指向某个域type where* point

指定指针的域并指定指针本身的存储域 type where* where point

const写在前面const type where* where point

声明struct类型不用where。定义变量时候用。struct变量不能跨域。


以下是干货来源

一下是实验结果

type value :data中的变量

where type value :where中的变量

type where value :where中的变量

where type where value 是的,没错,这种神经病写法也是在where中的变量

type * point data中的跨域指针,

where type * point 存储在where中的跨域指针

type * where point 存储在where中的跨域指针

where type * where point 这种更神经病的写法也是存储在where中的跨域指针

type where* point 存储在内部RAM中只能指向where的指针

where type where* point 存储在where中指向where的指针

type where* where point 存储在where中指向where的指针

很乱是吧?我们整理一下

聪明的同学已经发现规律了,是不是?

作为c不得不提的一种变量——指针。keil c51中还存在一个指针,这个指针实际上是sizeof(type*) + 1的。有一个字节来存储指针指向的区域。访问*point时对于不同区域的数据使用不同的指令。也就是说这中指针可以访问所有的总线。暂且称其跨域指针。


既然指针也是变量“指向什么东西”是指针变量的类型。那么互忽略类型,把这些写法调换顺序。

发现规律了么?data,idata,xdata,code可以在类型前,也可以在类型之后,或者前后都有。


定义变量时,c类型最前面最着最后面添加(或者前后都有)总线域修饰符,可以决定该变量存储的位置。前后都不加,默认是data。


我们在单独关心一下指针。

发现规律了么?type *是可以指向任何区域的指针。决定指针指向位置时候域修饰符必须在type和*之间。


至于const struct,呵呵自己试试就知道了。

关键字:keil  c51  data  idata  xdata  code 引用地址:keil c51中的data idata xdata code详解

上一篇:#51单片机#定时器
下一篇:c51中bdata是什么意思及使用方法

推荐阅读

        新浪科技讯 北京时间10月27日早间消息,据美国媒体Buzzfeed援引知情人士消息称,亚马逊已从彭博社网站撤下了第四季度广告投放,而苹果下周的发布会未邀请彭博社报道。知情人士表示,这是两家公司对彭博社有争议报道的报复行动。  消息人士称,亚马逊的数字媒介采买机构Initiative已于10月16日向彭博社销售团队通报,由于预算削减,亚马...
10月27日,据上交所公告称,锦州神工半导体股份有限公司(以下简称“神工股份”)将于11月6日科创板首发上会。招股书显示,神工股份是国内领先的半导体级单晶硅材料供应商,主营业务为半导体级单晶硅材料的研发、生产和销售,产品主要销往日本、韩国、美国等国家和地区,主要客户包括三菱材料、SK化学、CoorsTek、Hana、Silfex、Trinity、Wakatec、WDX等。...
海信是全球最大的电视品牌之一,该公司还销售其他电子产品,包括智能手机。近日,在工信部网站上发现了一款型号为 HNR551T 的新海信 5G 手机,揭示了其设计和配置。根据工信部的信息,即将到来的海信 HNR551T 将配备 6.5 英寸 HD +(1600 x 720 像素)TFT LCD 面板。在内部,这款智能手机将配备未知的 2GHz 八核处理器和 5G 调制解调器...
#1. C51的ROM大小Keil编译完之后,显示的Program Size: data=9.0 xdata=8 const=15 code=180,则The Total ROM(const + code + code-gap + const-gap) is 199BYTE实际生成的bin文件大小:在.MAP中的C O D E M E M O R Y 中code-gap为0,cosnt-gap为4,则const + code + const-gap=15 + 180 + 4 = 199,刚好和实际生成...

史海拾趣

问答坊 | AI 解惑

新加坡2006年将在四领域应用RFID

[摘要]新加坡正计划推动一项RFID(射频识别)技术,以实现零售物品的标签电子化,按照有关报道,新加坡将于2006年将这项技术普及于制造业、物流业、零售业、基础设施与药剂业。预计涉及金额高达1000万新元。新加坡正计划推动一项RFID(射频识别)技术, ...…

查看全部问答∨

PIC 硬件驱动的程序

PIC 硬件驱动的程序…

查看全部问答∨

高频汽车电源设计

概述   对于电源系统设计人员来说,电路密度的提高既是挑战也是机会。多数汽车电子模块要求低压供电,如5V、3.3V。如果通过线性降压方案将电池电压转换成所需电压,会消耗过多的能量。过多的功率耗散则会提高温度管理系统的设计难度和成本,随着 ...…

查看全部问答∨

LM3S6911直接用网口下载可以吗?

LM3S6911直接用网口下载可以吗?请师傅们指教谢谢…

查看全部问答∨

求助~OMAP上跑静态图像处理算法

现在要想在SEED-dec138里面跑一个图片jpeg处理算法,已经有matlab代码了,不知道怎么实现比较好?主要是从sd卡里面读出Jpeg然后进行处理,LCD显示出一些参数。   问了技术员,如果Qt的话要进行移植,比较麻烦 minigui的话不是太清楚 大家 ...…

查看全部问答∨

Makefile

Makefile 的细节…

查看全部问答∨

求助

用MSP430读写PCF8563,一定要用到PCF8563的驱动程序吗?…

查看全部问答∨

MSP430不同时钟怎么选择时钟源?

在MSP430中时钟源有低频振荡器,高频振荡器和数控振荡器,时钟有主时钟,子系统时钟,和辅助系统时钟,怎么配置时钟才能选择我所需要的时钟源啊?…

查看全部问答∨

晒WEBENCH设计的过程+一种低功耗电源应用设计

在低功耗应用中,系统的功耗除了和频率相关之外,和电源电压的高低也息息相关,电源电压越低,系统功耗越小。MSP430系列MCU的工作电压范围为 1.8 ~ 3.6V,在有ADC的应用场合,则最少需要2.4V的电压。然而最常用的供电电池,大部分都是3V 或 3.6V 或 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved