使用CS+ CCRL编译RL78系列MCU引起flash空间浪费的错误问题解析

描述

 

问题概述

客户使用IDE CS+ CCRL编译瑞萨RL78系列MCU  R5F1027A(flash空间16K),出现报错信息,“data”地址超出范围。而实际使用的flash约8K,还不到16K。R5F1027A项目使用的code flash约8K,一旦添加新代码就出现编译错误信息,提示地址溢出的错误?

FlaShFlaSh

分析

1

针对提示的错误信息,尝试屏蔽不同的软件函数,发现减少软件代码,编译恢复正常。

2

多次尝试后发现flash空间在超过8K左右后,会出现编译错误。

3

查看项目生成的MOT文件。发现code flash地址直接从0x2000开始,前面的0x00C4选项字节之后到0x2000 的flash空间都是没有使用到。

FlaSh

4

查看map文件,和mot文件相符合,.CONST 代码段是从0x2000开始分配的,也就是代码段前面的flash空间有将近8K没用上。 

FlaSh

5

分析确认到原因后,多次尝试修改section settings。参考RL78其他型号code flash 8K的R5F10268的CS+ CCRL工程设置,发现.const分配的地址是从0x00CE开始。而R5F1027A的工程默认从0x2000开始,所以想把.const直接从0x2000改成0x00CE,一直提示不符合设置范围的错误。最后把.const分配的地址放到后面改成0x3C00,其他代码段.text则按顺序从0x00D0开始,这样设置后,编译成功了。

FlaShFlaSh

6

以上设置过后代码重新编译ok,也从0x00D0开始,但是当设置开启On-chip在线仿真功能后,发现报监控字节的错误。

FlaSh

7

查看数据手册发现,debug监控字节会占用10个字节,从0x00CE开始到0x00D8.

FlaSh

8

把代码段.text地址从0x00D0修改成0x00E0开始后,重新编译正常了。查看MAP文件和mot文件,地址也是符合的,从0x00E0开始分配。

FlaShFlaSh

总结

通过查看分析MAP文件和mot文件,定位到.CONST 代码段是从0x2000开始分配的,导致代码段前面的flash空间有将近8K没用上,最终通过修改设置代码段地址,问题得到解决。







审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分