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的主要内容,如果未能解决你的问题,请参考以下文章

jQuery动画高度和溢出

如何在没有固定高度的情况下使动态div溢出

在 IAR Workbench 上加载闪存加载程序失败

ST 链接代码的 IAR 错误

如何在 IAR 中执行单元测试和代码覆盖

自动换行链接,使其不会溢出其父 div 宽度 [重复]