求解,内部RAM和外部RAM地址问题
今天在敲代码的时候遇到一个问题,有一部分数据需要存储到flash,其它的数据都能存储进去,但是有一个字节的数据总是无法读取到正确的数据。如下代码所示:
unsigned charTwelveHourSystem;
IAP_Read(TIME_ADDR, (unsigned char xdata *)&TwelveHourSystem, sizeof(TwelveHourSystem));
其它的数据都能正常存储到flash中和读取。唯独这个数据TwelveHourSystem不行。
经过不断的测试发现,这个数据TwelveHourSystem压根就没有被写入的flash中,所以每次读取的数据也都是错误的。
一开始找不到问题在哪里,突然看到它们的数据类型虽然一样,但是一个使用的是内部RAM,一个使用的时候强转为了外部RAM地址,于是就修改了一下
unsigned charTwelveHourSystem; ------> 该为 unsigned char xdata TwelveHourSystem;
然后发现问题就解决了。但是这里还是有些不理解。
查看了一下内部RAM和外部RAM的区别,它们一个是直接寻址,一个是间接寻址,且是16位寻址,但是对于它们的地址无法强转还是有些不太理解。
如果说加上xdata就能正常 那可能你编译的模式用的small模式,,还是直接改成large吧 _奶咖君_ 发表于 2024-8-19 17:58
如果说加上xdata就能正常 那可能你编译的模式用的small模式,,还是直接改成large吧 ...
是这个地方吗
对的 这里的设置是告诉编译器,在用户没有指定内存区域的变量应该放在哪里。。
如果你有自己的规划,那可以不用管这里的配置,按着你的规划走就行,, 建议用small,让编译器默认放data,提高访问速度,大数组再手动指定放xdata,编译后注意data大小
页:
[1]