找回密码
 立即注册
查看: 440|回复: 4

求解,内部RAM和外部RAM地址问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2024-12-20 11:10:53

6

主题

0

回帖

151

积分

注册会员

积分
151
发表于 2024-8-19 17:50:11 | 显示全部楼层 |阅读模式
今天在敲代码的时候遇到一个问题,有一部分数据需要存储到flash,其它的数据都能存储进去,但是有一个字节的数据总是无法读取到正确的数据。
如下代码所示:

unsigned char  TwelveHourSystem;
IAP_Read(TIME_ADDR, (unsigned char xdata *)&TwelveHourSystem, sizeof(TwelveHourSystem));

其它的数据都能正常存储到flash中和读取。唯独这个数据TwelveHourSystem不行。

经过不断的测试发现,这个数据TwelveHourSystem压根就没有被写入的flash中,所以每次读取的数据也都是错误的。
一开始找不到问题在哪里,突然看到它们的数据类型虽然一样,但是一个使用的是内部RAM,一个使用的时候强转为了外部RAM地址,于是就修改了一下
unsigned char  TwelveHourSystem; ------> 该为 unsigned char xdata TwelveHourSystem;
然后发现问题就解决了。但是这里还是有些不理解。
查看了一下内部RAM和外部RAM的区别,它们一个是直接寻址,一个是间接寻址,且是16位寻址,但是对于它们的地址无法强转还是有些不太理解。




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-07-01 09:00:47

33

主题

2439

回帖

5198

积分

论坛元老

积分
5198
发表于 2024-8-19 17:58:15 | 显示全部楼层
如果说加上xdata就能正常 那可能你编译的模式用的small模式,,还是直接改成large吧
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2024-12-20 11:10:53

6

主题

0

回帖

151

积分

注册会员

积分
151
发表于 2024-8-20 09:20:10 | 显示全部楼层
_奶*** 发表于 2024-8-19 17:58
如果说加上xdata就能正常 那可能你编译的模式用的small模式,,还是直接改成large吧 ...

是这个地方吗 截图202408200919323734.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-07-01 09:00:47

33

主题

2439

回帖

5198

积分

论坛元老

积分
5198
发表于 2024-8-20 09:27:49 | 显示全部楼层
对的 这里的设置是告诉编译器,在用户没有指定内存区域的变量应该放在哪里。。

如果你有自己的规划,那可以不用管这里的配置,按着你的规划走就行,,
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:483
  • 最近打卡:2025-07-01 00:06:00
已绑定手机

81

主题

5247

回帖

9387

积分

超级版主

DebugLab

积分
9387
发表于 2024-8-20 09:43:27 | 显示全部楼层
建议用small,让编译器默认放data,提高访问速度,大数组再手动指定放xdata,编译后注意data大小
DebugLab
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-7-1 19:40 , Processed in 0.120589 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表