作 者:武力戡乱
修改日期:2017-09-13
备 注:
1、总备注信息
2、联系方式
3、其它博文链接:武力戡乱博客目录总表
4、转载地址:http://blog.sina.com.cn/s/blog_446cfdc60100zb0q.html
内 容:
Memory Model: small 模式下未指存储类型的变量默认为data型,即直接寻址,只能访问低 128 个字节,但这 128 个字节也不是全为你程序所有,寄存器 R0-R7必须映射到低RAM,要占去 8 个字节,如果使用寄存组切换,占用的更多。
所以你可以使用 data 区最大为 120 字节,超出 120 个字节则必须用 idata 显示的指定为间接寻址,另外堆栈至少要占用一个字节,所以你最多能使用 127 上字节(如果)
有个简单的方法就是打开你的输出文件夹中的 .M51 符号表文件,查找哪些变量被移到了 xdata,然后修改你的程序,在这些变量前加上 idata,再编译看看,或直接把某些变量定义为idata型。
另外,对 idata 的定义的变量最好放在 data 变量之后
对于这一种定义
uchar c1;
idata uchar c2;
uchar c3;
变量 c2 肯定会以间接寻址,但它有可以落在 data 区域,就浪费了一个可直接寻址的空间