MPLAB链接错误:无法分配段(C30编译器)(MpLab Link Error: Could No

2019-11-01 18:48发布

我已经把代码的两件一起(最初在描述这个问题在这里 )。

现在我刚刚经历此错误MPLAB(Microchip的MPLAB C30)

 Link Error: Could not allocate section .nbss, size = 20004 bytes, attributes = bss near 

奇怪的事情,我找了该消息,该消息甚至子串,在编译器手册(Microchip的出版物DS51284F),并没有发现什么。

我甚至找了一个单词分配 ,发现它只有三,四次,从来没有一个错误信息。

在此之前把这些两段代码在一起,我在为0x8000定义的片段,我使用的内存的“大块”我们将使用过移动从东西-X数据事情-Y其中

我缩水,我在为0x8000已经确定下来,以1个字节孤立的数据区,而我仍然得到这个错误。

我没有看到这条消息,从Microchip的编译器手动DS51284F记录。 有没有人之前解决这个?

是否有链接不同的手册?

有没有一种方法,我可以得到一个存储地图上看到我的内存区域?

Answer 1:

该错误表明没有足够的内存留在了未初始化变量(近BSS或简称NBSS)Near数据空间。

您可以使用这些建议,以减少数据内存使用情况:1)使用编译器优化,-O3或者-Os。

2)选择大数据模型下编译器编译选项: - 默认的-msmall-数据 - 大(> 8KB)-mlarge数据 - 小(<= 8KB)-msmall数据的默认的数据模型是小的。

3)声明一些远空间的变量。 这将释放在不久的RAM空间的空间。

4)降低的大小或功能的参数数目,例如而不是传递通过值的结构将指针传递到相同的代替。

5)存储类的一些本地变量更改为静态或使其全球。

6)如果可能的话再利用局部变量和参数。

7)使用它并不比他们所需要的是更大的类型,例如计数器变量在for循环中有100多个对象只需要为一个char一样大。

8)将你的一些初始化的数据/阵列到代码空间。 -mconst-在码



文章来源: MpLab Link Error: Could Not Allocate Section (C30 Compiler)