问题概述
客户使用IDE CS+ CCRL编译瑞萨RL78系列MCU R5F1027A(flash空间16K),出现报错信息,“data”地址超出范围。而实际使用的flash约8K,还不到16K。R5F1027A项目使用的code flash约8K,一旦添加新代码就出现编译错误信息,提示地址溢出的错误?
分析
1
针对提示的错误信息,尝试屏蔽不同的软件函数,发现减少软件代码,编译恢复正常。
2
多次尝试后发现flash空间在超过8K左右后,会出现编译错误。
3
查看项目生成的MOT文件。发现code flash地址直接从0x2000开始,前面的0x00C4选项字节之后到0x2000 的flash空间都是没有使用到。
4
查看map文件,和mot文件相符合,.CONST 代码段是从0x2000开始分配的,也就是代码段前面的flash空间有将近8K没用上。
5
分析确认到原因后,多次尝试修改section settings。参考RL78其他型号code flash 8K的R5F10268的CS+ CCRL工程设置,发现.const分配的地址是从0x00CE开始。而R5F1027A的工程默认从0x2000开始,所以想把.const直接从0x2000改成0x00CE,一直提示不符合设置范围的错误。最后把.const分配的地址放到后面改成0x3C00,其他代码段.text则按顺序从0x00D0开始,这样设置后,编译成功了。
6
以上设置过后代码重新编译ok,也从0x00D0开始,但是当设置开启On-chip在线仿真功能后,发现报监控字节的错误。
7
查看数据手册发现,debug监控字节会占用10个字节,从0x00CE开始到0x00D8.
8
把代码段.text地址从0x00D0修改成0x00E0开始后,重新编译正常了。查看MAP文件和mot文件,地址也是符合的,从0x00E0开始分配。
总结
通过查看分析MAP文件和mot文件,定位到.CONST 代码段是从0x2000开始分配的,导致代码段前面的flash空间有将近8K没用上,最终通过修改设置代码段地址,问题得到解决。
更多内容您可识别下方二维码查看:
您可复制下方网址到浏览器中打开进入瑞萨中文论坛:
https://community-ja.renesas.com/zh/frums-groups/mcu-mpu/
1
END
1
推荐阅读
CS+ for CC自定义Section方法
CS+ for CC对于未使用的函数的处理
CS+ for CA,CX查看RL78程序栈的使用