MpLab链路错误:Could Not Allocate Section (C30编译器)



我已经把这两段代码放在一起了(最初在This Question Here中描述)。

我现在刚刚从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中记录的此消息。以前有人解决过这个问题吗?

链接器有不同的手册吗?

是否有一种方法,我可以得到一个内存地图,看看我的内存区域在哪里?

该错误指示在near data space中没有足够的内存留给未初始化的变量(near bss或简称nbss)

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

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

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

4)减少函数形参的大小或数量,例如,与其按值传递结构体,不如传递指向该结构体的指针。

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

6)尽可能重用局部变量和参数。

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

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

最新更新