C 链接器可以';t将块放入可用内存范围

C 链接器可以';t将块放入可用内存范围,c,linker,iar,C,Linker,Iar,我使用带有256KB RAM内存的微控制器CC3220,内存放置有一些问题 用于ARM的IAR ELF连接器V7.80.1.28/LNX 版权所有2007-2016 IAR Systems AB 错误[Lp011]:节放置失败 无法将块P3-P4-1(最小尺寸0x795,对齐0x8)放入: 计算范围内的自由空间等于0x111B,这肯定大于块P3-P4-1最小大小0x795。因此,尽管总体内存利用率约为99%(262144中的259963个),但仍然有足够的可用空间来分配额外的块P3-P4-1 我

我使用带有256KB RAM内存的微控制器CC3220,内存放置有一些问题

用于ARM的IAR ELF连接器V7.80.1.28/LNX

版权所有2007-2016 IAR Systems AB

错误[Lp011]:节放置失败 无法将块P3-P4-1(最小尺寸0x795,对齐0x8)放入:

计算范围内的自由空间等于0x111B,这肯定大于块P3-P4-1最小大小0x795。因此,尽管总体内存利用率约为99%(262144中的259963个),但仍然有足够的可用空间来分配额外的块P3-P4-1

我没有在TI和IAR文档中找到任何特定信息,因此如果有人能帮助我澄清细节或向我指出以下问题的资源,我将不胜感激:

即使内存似乎足够,放置P3-P4-1的问题的根本原因是什么

@很遗憾,我无法共享整个文件,但这里是其中的一部分

"P3-P4", part 1 of 3:                      0x2bf40
  .text               ro code  0x20004040   0x2ef4  ds_network.o
  .rodata             const    0x2002e6b0    0x4cc  d_network.o
  Initializer bytes   const    0x2002eb7c    0x39f  <for P3-P4-1> (used: 0x38b)
                             - 0x2002ff80  0x2bf40
"P3-P4", part 2 of 3:                       0xe85c
  .bss                zero     0x2002ff80   0x6d78  heap_4.o
  .bss                zero     0x2003e7d9      0x1  interrupt_event.o
                                     0x2003e7da   0xe85a
"A0":                                        0x800
  CSTACK                       0x2003f7f0    0x800  <Block>
    .stack            uninit   0x2003f7f0    0x800  startup_cc32xx_iar.o
                             - 0x2003fff0    0x800
"P3-P4", part 3 of 3 (*** FAILED ***):       0x795
  P3-P4-1                                    0x795  <Init block>
    .data             inited                  0x78  diagnostic.o
    .data             inited                   0x1  d_als.o 
                                             0x795
“P3-P4”,第1部分,共3部分:0x2bf40
.text ro代码0x200004040 0x2ef4 ds_网络.o
.rodata常量0x2002e6b0 0x4cc d_网络.o
初始值设定项字节常量0x2002eb7c 0x39f(使用:0x38b)
-0x2002ff80 0x2bf40
“P3-P4”,第2部分,共3部分:0xe85c
.bss零0x2002ff80 0x6d78堆_4.o
.bss零0x2003e7d9 0x1中断事件.o
0x2003e7da 0xe85a
“A0”:0x800
CSTACK 0x2003f7f0 0x800
.stack uninit 0x2003f7f0 0x800启动\u cc32xx\u iar.o
-0x2003fff0 0x800
“P3-P4”,第3部分,共3部分(***失败***):0x795
P3-P4-1 0x795
.数据初始化0x78诊断.o
.数据初始化0x1 d_als.o
0x795

B.R.Alex.

可以通过将
--map MyMapFile.txt
字符串传递给ilinkarm来生成映射文件。
生成映射文件,并检查在正确的内存范围内是否有大小>=0x795的连续可用内存块。

--map MyMapFile.txt
字符串传递到ilinkarm,即可生成映射文件。
生成映射文件并检查在正确的内存范围内是否有大小>=0x795的连续可用内存块。

感谢大家的响应。
我解决了我的问题,强制链接器放置大的对齐块,这有助于组织空闲内存并避免此类奇怪的问题。

感谢大家的响应。
我解决了我的问题,强制链接器放置大的对齐块,这有助于组织可用内存并避免此类奇怪的问题。

总内存中的可用空间小于0x111B范围。这不符合逻辑。也许已经有其他东西放在这个范围内。谢谢评论。我已经检查过与另一个块重叠的MAP文件,但是在提到的范围内没有明显的位置。为什么在你的0x03E6D4-0x03F7EF范围中间有“代码>中断Twitter事件?O</CODE(0x033E7D9)?我不熟悉CC3220,但是这个位置看起来很不连贯。到处都有巨大的缺口,打破了自由空间。我认为在不知道放置声明(在链接器脚本和源文件中)的情况下,我们无法解决这个问题。总内存中的可用空间小于0x111B范围。这不符合逻辑。也许已经有其他东西放在这个范围内。谢谢评论。我已经检查过与另一个块重叠的MAP文件,但是在提到的范围内没有明显的位置。为什么在你的0x03E6D4-0x03F7EF范围中间有“代码>中断Twitter事件?O</CODE(0x033E7D9)?我不熟悉CC3220,但是这个位置看起来很不连贯。到处都有巨大的缺口,打破了自由空间。我认为在不知道位置声明(在链接器脚本和源文件中)的情况下,我们无法解决这个问题。感谢您的评论。我已经这样做了,但是没有明显的位置在提及范围内。你能分享你的地图文件吗?我不能分享整个文件。谢谢你的评论。我已经这样做了,但是没有明显的位置在提及范围内。你能分享你的地图文件吗?我不能分享整个文件。