【发布时间】:2018-08-15 12:50:40
【问题描述】:
我使用的是 STM32L432KC 微控制器,它有两个独立的内部 RAM 区域(SRAM1 为 48kB,SRAM2 为 16kB)。内存范围不相邻,因此无法将它们作为一个 64kB 的块来使用。
在默认链接描述文件中,所有数据包括。堆和栈位于 SRAM1 中,而 SRAM2 未使用。现在我想在 SRAM2 中定位堆和堆栈。但是,无法理解如何告诉链接器堆的位置。
我发现了一条语句“在 BSS 段之后分配了 HEAP”,并且我发现了一些提示,即堆从“结束”符号开始。链接器没有明确的符号来定位堆吗?
我在地图文件中发现了一个符号“__malloc_sbrk_start”,但这似乎有所不同(Google 没有帮助)。
【问题讨论】:
-
什么工具链?
-
工具链是“Ac6 STM32 MCU GCC”(STM32 的 SystemWorkbench)。叫我笨蛋,但我找不到任何版本信息。
-
所以您使用的是 GNU 编译器?链接器有据可查。您是否尝试过从默认链接器脚本开始并对其进行修改?
-
heap 和 sbrk 来自 C 库而不是工具链。它在库中的 malloc 实现背后。
标签: heap-memory stm32 cortex-m linker-scripts