有啥理由不在 MCU 上增加 .bss 或 .data 部分的大小?
Posted
技术标签:
【中文标题】有啥理由不在 MCU 上增加 .bss 或 .data 部分的大小?【英文标题】:Any reason not to increase .bss or .data section size on MCU?有什么理由不在 MCU 上增加 .bss 或 .data 部分的大小? 【发布时间】:2021-09-12 07:55:52 【问题描述】:我有点惊讶我找不到这个问题的答案,所以我就问一下。 我有一个非常大的查找表,它未初始化,因此将放置在我的 TI TMS320F280049 MCU 的 .bss 部分中。毫不奇怪,bss 部分为此太小了。
所以我想了几种方法来解决这个问题:
-
增加 .bss 部分的大小
初始化 LUT(在我的情况下这不是必需的)并增加 .data 大小直到它适合那里。
为此 LUT 创建一个专用 RAM 部分(必须是 RAM,由于访问时间较慢,闪存不够用)
由于缺乏经验,我无法确定哪种变体最好。有什么理由不应该搞砸 .bss 和 .data 的部分大小?
提前感谢您抽出宝贵时间回答!
【问题讨论】:
【参考方案1】: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.
我在这种情况下看到的唯一缺点是,编译器会生成一个单独的部分来存储初始值。这只是增加了总内存大小(初始值通常加载到 Flash)。
此外,初始化全局变量会消耗周期。但是,如果您使用的是 EABI 格式,即使是未初始化的变量也会默认初始化为 0,因此您不会看到周期的显着差异。但是在 COFF 格式的情况下,这种方法会消耗更多的周期。
3) Create a dedicated RAM section for this LUT
这个方法也很好用。您可以使用 #pragma DATA_SECTION 使全局转到用户指定的部分,而不是默认的 .bss 部分。需要在带有 RAM 映射的 cmd 文件中指定此新部分。我看不出这种方法比第一种方法有任何优点或缺点
【讨论】:
以上是关于有啥理由不在 MCU 上增加 .bss 或 .data 部分的大小?的主要内容,如果未能解决你的问题,请参考以下文章