这个研究了几天,都不成功
工程设置如下:
未命名-1.gif (50.16 KB, 下载次数: 0)
下载附件
2012-7-4 14:49 上传
代码如下:
#include "io8051.h"
int main()
{
const unsigned char __xdata tmp = 32;
__code const unsigned char array[] = {0xF3,0x68};
SCON = 0x50;
TMOD|= 0x20;
TH1 = 0xFB;
TL1 = 0xFB;
TCON_bit.TR1 = 1;
IE_bit.ES = 1; //允許串口中斷
P0 = tmp;
while(SCON_bit.TI ==0);
SCON_bit.TI = 0;
SBUF = tmp;
return 0;
}
tmp和array[]的定义都提示错误:Error[Be009]: memory attributes not allowed on auto variables or parameters
网上搜索了一下,包括IAR的C/C++参考手册,都说用__xdata,__code就可以了,但无论怎么做都不行
按照此贴
http://www.amobbs.com/thread-5482677-1-1.html,我已将想放在xdata区的常量声明了const(不声明const也试过,效果一样)
难道是我用的版本不同,太新??我用 8.10.3 的。
谢谢大家
----------------------------------------------------------------------------------------------------------------------------------------------------------
已经说的很清楚了。
局部变量不能使用memory attributes。
原因很简单:局部变量是自动分配变量,由编译器自动分配到寄存器或者堆栈,不能加memory attributes。
__code const unsigned char array[] = {0xF3,0x68};
array是局部变量,是要放在堆栈的,难道楼主认为code区还能放堆栈不成?
只有静态分配变量才能加memory attributes
static const unsigned char __xdata tmp = 32;
static const unsigned char __code array[] = {0xF3,0x68};
----------------------------------------------------------------------------------
加上static关键字就行了,另外__xdata,__code等一般紧挨着变量名。
一周热门 更多>