链接器无法将块放入可用内存范围

时间:2019-08-14 12:33:38

标签: c linker iar

我使用具有256KB RAM内存的微控制器CC3220S,并且在内存放置方面存在一些问题。

IAR ELF链接器V7.80.1.28 / LNX for ARM

版权所有2007-2016 IAR Systems AB。

错误[Lp011]:节放置失败             无法将块P3-P4-1(最小尺寸0x795,对齐0x8)放在以下位置:<[0x2003e6d4-0x2003f7ef]>

在范围[[0x2003e6d4-0x2003f7ef]>中计算出的可用空间等于0x111B,这绝对大于块P3-P4-1的最小大小0x795。因此,尽管事实是总体内存利用率约为99%(262144中的259963),但仍有足够的可用空间来分配其他块P3-P4-1。

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

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

@nivpeled不幸的是,我无法共享整个文件,但这是其中的一部分

"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

B.R。亚历克斯。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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