IAR代码溢出问题处理section placement failed
Posted aron566
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IAR代码溢出问题处理section placement failed相关的知识,希望对你有一定的参考价值。
问题现象
unable to allocate space for sections/blocks with a total estimated minimum size of 0x45af bytes (max align 0x8) in <[0x2000'0000-0x2000'5fff]> (total uncommitted space 0x3ffc).
处理方法
- 找到生成的
.map
文件 - 打开IAR的链接脚本文件(建议使用
vs code
打开,在商店中搜索:ext:icf
安装即可,此时打开的文件会带语法高亮)
从上面的报错信息看,0x45af
空间大小的数据未能正确分配,分配的地址为0x2000'0000-0x2000'5fff
1、打开链接脚本文件xxx.icf
,其中找到关键地址0x2000'0000-0x2000'5fff
可以看出,这是我们的DRAM区域的地址,此处的地址空间不足,导致链接失败,接下来我们处理它。
2、在.map文件中找到:Unused ranges
,找到未使用空间大小,从这里的统计信息得出我们留给编译器的可分配空间为:0x20003fff-20000004,等于0x3FFB即16379个字节大小不足16KB,编译器需要的是0x45af即17839个字节空间
。
3、增大空间:总空间大小是固定的,那么只有缩减其他区域的空间,最简单的方法(直接缩减栈或者堆的空间),否则搜索已0x2000xxxx
地址开头的变量(符号),在代码中删除或者减小这些变量(符号)的大小。
以上处理方式不仅仅适用与IAR,各IDE遇到此类问题处理方法类似。
以上是关于IAR代码溢出问题处理section placement failed的主要内容,如果未能解决你的问题,请参考以下文章