0

我将这两段代码放在一起(最初在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 中看到此消息。以前有没有人解决过这个问题?

链接器有不同的手册吗?

有没有办法让我获得一个内存映射来查看我的内存区域在哪里?

4

1 回答 1

3

该错误表示near 数据空间中没有足够的内存用于未初始化的变量(bss 附近或简称nbss)。

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

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

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

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

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

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

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

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

于 2014-11-19T18:11:06.630 回答