有什么理由不增加 MCU 上的 .bss 或 .data 部分大小?
Any reason not to increase .bss or .data section size on MCU?
我有点惊讶我找不到这个问题的答案所以我就问一下。
我有一个非常大的 Look Up Table,它没有被初始化,因此将被放置在我的 TI TMS320F280049 MCU 的 .bss 部分。毫不奇怪,bss 部分太小了。
所以我想到了几种方法来解决这个问题:
- 增加 .bss 部分大小
- 初始化 LUT(在我的情况下这不是必需的)并增加 .data 大小直到它适合那里。
- 为这个 LUT 创建一个专用的 RAM 部分(必须是 RAM,由于访问时间较慢,flash 不够用)
由于缺乏经验,我无法真正判断哪种变体最好。有什么理由不应该改变 .bss 和 .data 的部分大小?
提前感谢您抽出时间回答!
来自 TI 支持的回答:
1) Increase the .bss section size
我们只使用 1 个 RAM 块来分配 bss 部分并没有特别的原因。这只是一个模板,对于 C2000ware 示例来说已经足够了。用于映射部分的RAM数量没有限制
2) Initialize the LUT (which is not really necessary in my case) and increase the .data size until it fits in there.
我在这种情况下看到的唯一缺点是,编译器会生成一个单独的部分来存储初始值。这只会增加总内存大小(初始值通常加载到闪存)。
此外,全局变量的初始化会消耗周期。但是,如果您使用的是 EABI 格式,即使是未初始化的变量也会默认初始化为 0,因此您不会看到周期上的显着差异。但是在COFF格式的情况下,这种方法会消耗更多的周期。
3) Create a dedicated RAM section for this LUT
这个方法也很管用。您可以使用 #pragma DATA_SECTION 使全局转到用户指定的部分,而不是默认的 .bss 部分。这个新部分需要在带有 RAM 映射的 cmd 文件中指定。我看不出这种方法比第一种方法有任何优点或缺点
我有点惊讶我找不到这个问题的答案所以我就问一下。 我有一个非常大的 Look Up Table,它没有被初始化,因此将被放置在我的 TI TMS320F280049 MCU 的 .bss 部分。毫不奇怪,bss 部分太小了。
所以我想到了几种方法来解决这个问题:
- 增加 .bss 部分大小
- 初始化 LUT(在我的情况下这不是必需的)并增加 .data 大小直到它适合那里。
- 为这个 LUT 创建一个专用的 RAM 部分(必须是 RAM,由于访问时间较慢,flash 不够用)
由于缺乏经验,我无法真正判断哪种变体最好。有什么理由不应该改变 .bss 和 .data 的部分大小?
提前感谢您抽出时间回答!
来自 TI 支持的回答:
1) Increase the .bss section size
我们只使用 1 个 RAM 块来分配 bss 部分并没有特别的原因。这只是一个模板,对于 C2000ware 示例来说已经足够了。用于映射部分的RAM数量没有限制
2) Initialize the LUT (which is not really necessary in my case) and increase the .data size until it fits in there.
我在这种情况下看到的唯一缺点是,编译器会生成一个单独的部分来存储初始值。这只会增加总内存大小(初始值通常加载到闪存)。
此外,全局变量的初始化会消耗周期。但是,如果您使用的是 EABI 格式,即使是未初始化的变量也会默认初始化为 0,因此您不会看到周期上的显着差异。但是在COFF格式的情况下,这种方法会消耗更多的周期。
3) Create a dedicated RAM section for this LUT
这个方法也很管用。您可以使用 #pragma DATA_SECTION 使全局转到用户指定的部分,而不是默认的 .bss 部分。这个新部分需要在带有 RAM 映射的 cmd 文件中指定。我看不出这种方法比第一种方法有任何优点或缺点