不同内存空间定义变量注意事项

上传人:ba****u6 文档编号:169722436 上传时间:2022-11-17 格式:DOCX 页数:3 大小:14.37KB
收藏 版权申诉 举报 下载
不同内存空间定义变量注意事项_第1页
第1页 / 共3页
不同内存空间定义变量注意事项_第2页
第2页 / 共3页
不同内存空间定义变量注意事项_第3页
第3页 / 共3页
资源描述:

《不同内存空间定义变量注意事项》由会员分享,可在线阅读,更多相关《不同内存空间定义变量注意事项(3页珍藏版)》请在装配图网上搜索。

1、1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比 如for循环中的计数值。2、data区内最好放局部变量。因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放由别 的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与 全局变量相同;3、确保你的程序中没有未调用的函数。在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空 间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空

2、间。在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 d

3、ata *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义 是指针p指向data区变量,而其本身存放在xdata区。单片机初学者一般对c51语言里的DATA,XDATA,BDATA,IDATA,CODE,不是很清楚, 因为在微机的c语言里根本没有这些东西,一下子出来难以让人接受,特别是没有硬件基本 的朋友们这也是写程序的时候经常犯错误的地方。请看下表空间名称地址范围说明DATAD:00H7FH片内RAM直接寻址区BDATAD:20H2FH片内RAM位寻址区IDATAI:00HFFH片内RAM间接寻址区XDATAX:0000HFFFFH64K片外RAM数

4、据区CODEC:0000HFFFFH64K片内外ROM代码区B0:0000HFFFFHBANK0BANK31:分组代码区,最大可扩展32X64KB ROMB31:0000HFFFFH空间名称地址范围DATAD:00H7FHBDATAD:20H2FH说明片内RAM直接寻址区片内RAM位寻址区片内RAM间接寻址区XDATAX:0000HFFFFH64KB常规片外RAM数据区HDATAX:0000HFFFFFFH16MB扩展片外RAM数据区IDATAI:00HFFHCODEC:0000HFFFFH 64K常规片内外ROM代码区HCONST(ECOD C:0000HFFFFF 16MB 扩展片外 RO

5、M 常数区(对 Dallas390 可用作代 E)FH码区)B0:0000HFFFFHBANK0BANK3 :分组代码区,最大可扩展32X64KB ROM1B31:0000HFFFFH单片机中关键字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做指

6、针式的访问效果很好)xdata :外 部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。pdata:外部扩展RAM的低 256个字节,地址出现在A0-A7的上时读写,用movx ACC,Rx读写。这个比较特殊,而且 C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。startup.a51 的作用和 汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定 义全局变量时带有数值,如unsigned char data xxx=100;,那startup.a51中就会有相关的赋 值。如果没有=100,startup.a51就会把他清0(startup.a51 =变量的初始化)。这些初 始化完毕后,还会设置SP指针。对非变量区域,如堆栈区,将不会有赋值或清零动作。有人喜欢改startup.a51,为了满足自己一些想当然的爱好,这是不必要的,有可能错误的。比 如掉电保护的时候想保存一些变量,但改startup.a51来实现是很笨的方法,实际只要利用 非变量区域的特性,定义一个指针变量指向堆栈低部:Oxff处就可实现。,为什么还要去改? 可以这么说:任何时候都可以不需要改startup.a51,如果你明白它的特性

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!