急求高手!!!!单片机c语言数组问题?

[复制链接]
3835|8
 楼主| hanzhenfei 发表于 2011-8-11 16:32 | 显示全部楼层 |阅读模式
我定义两个数组;
uchar code table1[]={0x0c,0x20,0xfe,0x40};
uchar code table2[]={0x40,0x5f,0xcd,0xfe};
for(i=0;i<4;i++)
{
    table2[i]=table1[i];  这一局在编译时出现错误,为什么?还有如果去掉code可以;
}
liang7143 发表于 2011-8-11 17:07 | 显示全部楼层
看手册去
C51中code 是将数组分配在代码段 也就是说 这个数组里面的数据是不可以在修改的
johnwjl 发表于 2011-8-11 19:51 | 显示全部楼层
const 或 code 类型是不能作为左值的。
 楼主| hanzhenfei 发表于 2011-8-11 20:19 | 显示全部楼层
这个还真不知道,受教了
 楼主| hanzhenfei 发表于 2011-8-11 20:20 | 显示全部楼层
明白了 2# liang7143
 楼主| hanzhenfei 发表于 2011-8-11 20:22 | 显示全部楼层
我查了资料。code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句起到代替汇编指令的作用,对应的还有data是存入RAM的意思,如果code 换成data 应该可以吧
2# liang7143
永远的不知 发表于 2011-8-12 11:15 | 显示全部楼层
6# hanzhenfei

用data可以,code相当于常量了,所以不能被赋值。
liang7143 发表于 2011-8-12 12:25 | 显示全部楼层
我查了资料。code的作用是告诉单片机,我定义的数据要放在ROM(程序存储区)里面,其实是相当与汇编里面的寻址MOVX(好像是),因为C语言中没办法详细描述存入的是ROM还是RAM(寄存器),所以在软件中添加了这一个语句 ...
hanzhenfei 发表于 2011-8-11 20:22

可以

   data     --->    可寻址片内ram
    bdata    --->    可位寻址的片内ram
    idata    --->    可寻址片内ram,允许访问全部内部ram
    pdata    --->    分页寻址片外ram (MOVX @R0) (256 BYTE/页)
    xdata    --->    可寻址片外ram (64k 地址范围)
    code     --->    程序存储区 (64k 地址范围),对应MOVC @DPTR
zbb564833642 发表于 2011-8-25 14:28 | 显示全部楼层
受教了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

147

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部