STC89C52RC XDATA中uchar二维数组初始化

2020-03-08 19:20发布

学习12864,计划用uchar二位数组,在xdata中开辟一个1k缓存的,这是背景。

所以在XDATA区定义了uchar数组:lcdbuf[32][32],初始化时用2个for循环清空元素值。
程序编译通过,下载到单片机,不报错。

但通过液晶实际写入时发现,lcdbuf[8][0]之前的内容可以被初始化,但其以及之后的数组内容都是0XFF。
也就是话,初始化程序跑完了,但只清空了256(8*32)个字节的元素。

另外测试了一下,程序中,如果单独对lcdbuf[8][0]或之后的元素赋值,还是可以做到的。

不知道是什么原因呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
ningling_21
1楼-- · 2020-03-09 23:12
broadbj 发表于 2016-11-24 15:28
那就是单片机硬件问题了吧

可以致电STC客服咨询
broadbj
2楼-- · 2020-03-10 02:28
ningling_21 发表于 2016-11-24 16:04
可以致电STC客服咨询

ningling_21,谢谢您的回复。
手头有两片,换了另外一片也是一样的结果,是否硬件再说吧。

现在疑问的地方是下面语句执行时,同样的两句,结果却不同,还请您帮忙看一看,
谢谢了!
这句无法给元素赋值:for (m=0;m<1;m++){lcdbuf[0][m]=0xAA;}   
这句可以赋值:lcdbuf[0][0]=0xAA;
不知原因是什么。
whtwhtw
3楼-- · 2020-03-10 05:33
用volatile定义变量m试试
broadbj
4楼-- · 2020-03-10 07:02
 精彩回答 2  元偷偷看……
a343731655
5楼-- · 2020-03-10 10:12
89C52 首先只有256B的RAM,他能使用XDATA,也就是可以使用片外RAM,但是如果你没有装这个片外的RAM芯片的话。。。这时你用XDATA声明变量,有两种情况
1.如果配置界面-target界面,你勾选了 use  On-chip XRAM,你再编译,由于没有片外RAM,所以超出空间,编译应该报错。
2.你没勾选,他实际用的还是片内RAM。或是程序空间ROM。。

一周热门 更多>