网站首页 > 开源技术 正文
刚入门单片机的小伙伴估计很少接触到这三个关键字,但是随着学习的深入,特别是当你真正接触到使用51单片机开发的项目时,这几个关键字应该都不会陌生。
data、idata、xdata三者的主要区别有两点:
一、位置不一样:
它们定义的变量存放在单片机片上RAM(包括内部RAM和外部RAM,但都集成在单片机芯片内,固称“片上RAM”)中,但存放的地址不一样:
data定义的变量放在单片机前128字节(0x00~0x7F)地址空间中;
idata定义的变量放在(0x00~0xFF)地址空间中;
xdata定义的变量则是放在单片机片上外部扩展RAM空间中(一般指外部0x0000~0xFFFF空间,具体空间大小因单片机而异,有的单片机没有外部RAM)。
二、速度不一样:
data定义的变量速度最快,idata次之,xdata较前两者慢。
细心的小伙伴可能已经发现,data和idata定义的变量都是在单片机内部RAM空间(0x00~0xFF地址空间),并且两者定义的地址空间在前128字节完全重叠。事实确实如此,它俩空间虽然重叠,但是访问方式不一样,这正是导致data速度比idata快的原因。
下面来说说怎么用,很简单,在定义变量的时候在变量(全局变量或者局部变量均可)前加上即可,例如:
unsigned char data mydata;
idata unsigned char myidata;
unsigned char xdata myxdata;
有小伙伴又要问了,那我怎么知道一个变量什么时候该加关键字,该加哪个关键字呢?判断的依据是:如果一个变量用的很频繁(程序访问它的次数的多或者频繁),你可以将该变量加data或者idata,将其放到内部RAM中,提高访问速度;如果该变量很少被访问,则可以加xdata定义,将其放到外部RAM中,把有限的内部RAM留给真正需要“速度”的变量。如果你无法判断,就别加了,交给编译器处理吧。举两个栗子吧:
假如你的项目中有USB/串口/网络通信,且通信数据量较大而且较为频繁,那在通信发送/接收程序中的变量则可适当加上data或者idata;
我做过一个热敏行式打印机项目,其中需要频繁从字库芯片中加载数据到热敏打印头中,程序中我便给相关变量加上idata修饰。
其实还有两个关键字——bdata和pdata,我很少在实际项目中见到,很多书籍也不建议使用,固不多说。
支持原创,转载时请注明出处,疯狂码者愿与你一起努力,共同成长,谢谢!
猜你喜欢
- 2024-09-08 99MB缓存杀疯!锐龙5 5600X3D实测数据:便宜又大碗!
- 2024-09-08 Spring Boot2.X数据访问的三种主流姿势JDBC、MyBatis、JPA
- 2024-09-08 拼多多员工在脉脉上匿名发贴被辞退!大数据时代没有隐私?
- 2024-09-08 马斯克禁止第三方抓取X数据训练AI模型
- 2024-09-08 已经2021年了,iPhone X还有坚持下去的意义吗?
- 2024-09-08 解读X-32——大嘴巨怪,性能不凡——军用飞机/战斗机/美国X-32
- 2024-09-08 西部数据多款 SSD 通过 SIG 认证:SN850X、SN820、SN770 等型号
- 2024-09-08 速度、精准、便捷-Datacolor SpyderX 红蜘蛛显示器校色仪|大家测503
- 2024-09-08 微软“赢得了胜利”?PS5与Xbox Series X数据曝光
- 2024-09-08 马斯克向OpenAI发起挑战?xAI欲融资40亿美元,X数据成关键卖点!
你 发表评论:
欢迎- 07-10公司网站建站选择:人工建站和源码建站分析
- 07-10多用途游戏娱乐新闻网站HTML5模板
- 07-10站长教你搭建属于自己的网站(搭建网站的步骤)
- 07-10php宝塔搭建部署实战响应式塑料封条制品企业网站模板源码
- 07-10自适应响应式汽车配件类网站源码 html5高端大气汽车网站织梦模板
- 07-10网站标签怎么设置?(网站标签怎么设置比较好)
- 07-10PageAdmin企业网站制作中踩过的坑
- 07-10豆包给我输出的html在线象棋源码(有点简单)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)