问题概述
客户使用IDE CS+ CACX编译瑞萨RL78系列MCU R5F1027A,出现报错信息,code flash无法分配。而实际使用的flash 约10K还远不到16K。为什么R5F1027A(flash空间16K)使用的code flash不到16K就出现添加新代码后编译,提示无法分配的错误?
分析
1、经过排查没有对IDE编译环境CS+ CACX做特殊的设置,在项目代码比较少的情况下,编译也正常。
2、针对提示的错误信息,尝试屏蔽不同的软件函数,发现需要减少较多的软件代码,编译才恢复正常。
3、多次尝试后发现flash空间在超过8K左右后,会出现编译错误。
4、查看项目的HEX文件。发现flash地址从0x0C57,到0x1FFF的空间都是填充的FF,也就是这段flash空间没有使用到。
5、查看map文件,发现和HEX文件相吻合,@@CODEL代码flash段是从0x20C6开始分配的,也就是代码段分配在16K空间的后面8K。这样前面的flash空间有13A9字节,将近5K没用上。
6、分析确认到原因后,要想办法解决,多次尝试无果,再分析map文件。发现分配的代码段@@CODEL,从0x20C6开始是跟@@CNST 这个常量的段是相邻的。
7、想办法尝试改变@@CNST的地址分配,看看@@CNST的地址改变,是否会影响@@ CODEL代码段的地址分配。
8、把@@CNST这个常量的段,通过添加DR文件,设置到后面地址0x3C00后,发现编译正常了。
结论
查看生成的HEX文件,发现前面的flash空间0x0C57也用上了,问题得到解决。
通过和同事交流,以及多番查阅IDE的HELP文档,分析了解各个代码段@@XXXX的含义,解决了客户端遇到的问题。
打开进入瑞萨中文论坛了解更多信息:
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
来源:瑞萨MCU小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。