高手请问 Memory Model设定?

2020-02-05 09:24发布

专案设定为 Large:variables in XDATA,但是有些程序使用用变量(非自定的变量)不想使用 XDATA 要怎么设?

所谓非自定的变量是keil c51 自己产生的!!!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
mobile01
1楼-- · 2020-02-05 11:43
自己顶一下
theophilus
2楼-- · 2020-02-05 15:42
My wild guess:

#pragma SAVE
#pragma SMALL /* whatever */
...
... your code ...
... fin
#pragma RESTORE


NO GUARANTEE  

However, if it does work, you may want to define variables with storage specifier such as idata, xdata or pdata explicitly.
wx85105157
3楼-- · 2020-02-05 17:21

未命名.jpg (158.78 KB, 下载次数: 0)

下载附件

2012-4-18 14:28 上传



在这里设置
mobile01
4楼-- · 2020-02-05 20:38
 精彩回答 2  元偷偷看……
mobile01
5楼-- · 2020-02-05 22:15
wx85105157 发表于 2012-4-18 14:28
在这里设置

这个我知道!!但是你这样是全部程序.
问题是全部程序设定为 XDATA 模式,但是有部份程序不能使用XDATA,所以必须指定部份程序使用DATA方式.
因为有些变量不是自己定的,而是keil 自己内定的.
wx85105157
6楼-- · 2020-02-05 22:56
那这个变量加修饰嘛。。。

char XDATA i;这个是定义在外部程序空间(STC等把这些内存集成在芯片内部了)
char IDATA j;这个是定义在扩展的内存(52)
char DATA k;这个是单片机51默认的128内存



8051系列有片内、片外程序存储器,片内、片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code、data、xdata、idata以及根据51系列特点而设定的pdata类型

在51系列中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,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

一周热门 更多>