MpLab链接错误:无法分配部分(C30编译器)

我已将这两段代码放在一起(最初在此问题中描述)。

我现在刚从MpLab(Microchip MPLAB C30)遇到此错误

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

最奇怪的是,我在编译器手册(Microchip出版物DS51284F)中找到了该消息,甚至是该消息的子字符串,但没有发现任何消息。

我甚至寻找单词allocate ,发现它只有三到四次,从来没有出现过错误信息。

在将这两段代码放在一起之前,我有一个定义为0x8000的段,我用于内存的“大块”,我们将使用它来将数据从Thing-X移动到Thing-Y

我把我在0x8000定义的数据区缩小到1个单独的字节,我仍然收到这个错误。

我没有在Microchip的编译器手册DS51284F中看到此消息。 有没有人曾经解决过这个问题?

链接器有不同的手册吗?

有没有办法让我可以得到一张记忆图来查看我的记忆区域在哪里?

该错误表明在未初始化的变量(近bss或短nbss)的近数据空间中没有足够的内存。

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

2)在Compiler build options下选择Large Data Model: – default -msmall-data – large(> 8KB)-mlarge-data – small(<= 8KB)-msmall-data默认数据模型很小。

3)在远程空间中声明一些变量。 这将释放近ram空间的空间。

4)减少函数参数的大小或数量,例如,而不是通过值传递结构,而是将指针传递给相同的参数。

5)将一些局部变量的存储类更改为静态或使其成为全局变量。

6)在可能的情况下重用局部变量和参数。

7)使用不大于它们所需要的类型,例如,for循环超过100个对象的计数器变量只需要与char一样大。

8)将一些初始化的数据/数组放入代码空间。 -mconst-在码