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-08 21:13
先测试一下XDATA 是否正常
broadbj
2楼-- · 2020-03-09 02:22
ningling_21:
根据提示做了下面的测试:
1 增加一个lcdbuf0[8][32],在原有二位数组之前定义。目的是让它占掉xdata中前256字节。
2 修改lcdbuf[32][32]为lcdbuf[24][32],保持xdata中总字节数不变。

最终测试结果:
新增的lcdbuf0(xdata中前256字节),全部初始化成功;
修改的lcdbuf(xdata中257~1024字节),全部不成功,全为0XFF。

这样代表什么意思呢?
broadbj
3楼-- · 2020-03-09 08:08
追加说明一点:
使用2个for循环,给二位数组赋值,是上述的结果;
但程序中使用单独的一条语句,给某一个元素赋值,都是可以成功的。

比较困惑。
ningling_21
4楼-- · 2020-03-09 11:30
broadbj 发表于 2016-11-24 14:11
ningling_21:
根据提示做了下面的测试:
1 增加一个lcdbuf0[8][32],在原有二位数组之前定义。目的是让它占 ...

部分 xdata 不能正常使用
broadbj
5楼-- · 2020-03-09 12:37
 精彩回答 2  元偷偷看……
broadbj
6楼-- · 2020-03-09 17:48
ningling_21 发表于 2016-11-24 14:36
部分 xdata 不能正常使用

那就是单片机硬件问题了吧

一周热门 更多>