2、data区内最好放局部变量。 3、确保你的程序中没有未调用的函数。 4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。 5、其他不频繁用到和对运算速度要求不高的变量都放到xdata区。 7、当使用到指针时,要指定指针指向的内存类型。
下表是新型80C51单片机扩展空间的分配情况
空间名称
| 地址范围
| 说明
| 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, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。
startup.a51的作用
和 汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx="100
|