注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

碧空雄鹰的博客

人和人相遇,靠的是一种缘;人和人相处,靠的是一份诚;人和人相爱,靠的是一份真

 
 
 

日志

 
 
关于我

人生有三样东西是无法隐瞒的:咳嗽、贫穷和爱,你想隐瞒,却欲盖弥彰。 人生有三样东西是不该挥霍的:身体、金钱和爱,你想挥霍,却得不偿失。 人生有三样东西是无法挽留的:生命、时间和爱,你想挽留,却渐行渐远。 人生五靠: 命运不是靠时间,而是靠勤奋,时间不是靠虚度,而是靠使用,感情不是靠缘分,而是靠珍惜,金钱不是靠使用,而是靠投资,事业不是靠满足,而是靠踏实。 人生三大遗憾 : 不会选择,不坚持选择,不断地选择。

不同内存空间(data xdata bdata)定义变量在51单片机编程中的注意事项  

2013-05-07 17:11:06|  分类: KEIL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到 data 区内,比如 for 循环中的计数值。

2、 data 区内最好放局部变量。

因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同;

3、 确保你的程序中没有未调用的函数。

在 Keil C 里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点 Keil C 做得很愚蠢,但也没办法。

4、 程序中遇到的逻辑标志变量可以定义到 bdata 中,可以大大降低内存占用空间。

在 51 系列芯片中有 16 个字节位寻址区 bdata ,其中可以定义 8*16=128 个逻辑变量。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。

5、 其他不频繁用到和对运算速度要求不高的变量都放到 xdata 区。

6、 如果想节省 data 空间就必须用 large 模式,将未定义内存位置的变量全放到 xdata 区。当然最好对所有变量都要指定内存类型。

7、 当使用到指针时,要指定指针指向的内存类型。

在 C51 中未定义指向内存类型的通用指针占用 3 个字节;而指定指向 data 区的指针只占 1 个字节;指定指向 xdata 区的指针占 2 个字节。如指针 p 是指向 data 区,则应定义为: char data *p; 。还可指定指针本身的存放内存类型,如: char data * xdata p; 。其含义是指针 p 指向 data 区变量,而其本身存放在 xdata 区。

单片机 初学者一般对c51语言里的DATA ,XDATA ,BDATA,IDATA,CODE,不是很清楚,因为在微机的c语言里根本没有这些东西,一下子出来难以让人接受,特别是没有硬件基本的朋友们.这也是写程序的时候经常犯错误的地方。请看下表 

空间名称

地址范围

说明

DATA 
D:00H~7FH
片内RAM直接寻址区
BDATA 
D:20H~2FH
片内RAM位寻址区
IDATA 
I:00H~FFH
片内RAM间接寻址区
XDATA 
X:0000H~FFFFH
64K片外RAM数据区
CODE 
C:0000H~FFFFH
64K片内外ROM代码区
BANK0~BANK31 
B0:0000H~FFFFH
:
:
B31:0000H~FFFFH
分组代码区,最大可扩展32X64KB ROM



空间名称

地址范围

说明

DATA 
D:00H~7FH
片内RAM直接寻址区
BDATA 
D:20H~2FH
片内RAM位寻址区
IDATA 
I:00H~FFH
片内RAM间接寻址区
XDATA 
X:0000H~FFFFH
64KB常规片外RAM数据区
HDATA 
X:0000H~FFFFFFH
16MB扩展片外RAM数据区
CODE 
C:0000H~FFFFH
64K常规片内外ROM代码区
HCONST(ECODE) 
C:0000H~FFFFFFH
16MB扩展片外ROM常数区(对Dallas390可用作代码区)
BANK0~BANK31 
B0:0000H~FFFFH
:
:
B31:0000H~FFFFH
分组代码区,最大可扩展32X64KB ROM



单片机 中关键字 data ,idata,xdata ,pdata的区别data :
固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成 的代码也最小。

idata:
固定指前面0x00-0xff的256个RAM,其中前128和data 的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

xdata :
外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点。

  评论这张
 
阅读(260)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018