STM32开发中malloc使用和heap_size配置问题排查

问题描述 投票:0回答:1

我目前正在使用ST的ARM-M4芯片开发一个程序并移植了一个网络库。在调试过程中,我注意到如果我不将 .s 文件中的 heap_size 增加到 0x400,程序就会崩溃。我已经用我自己的动态内存分配函数mymalloc替换了系统的malloc接口。但是,当我检查 .map 链接器文件时,我仍然在某些文件中看到对 malloc 函数的引用,但我找不到 .map 文件中调用 malloc 的实际代码行。

我的问题: 在ST的MDK环境下,是否有更好的方法来判断系统的malloc函数是否正在被调用?比如可以在线设置断点吗?

STM32 上 .s 启动文件中的 heap_size 的用途是否超出了动态内存分配函数(如 malloc)?

除了与malloc相关的动态内存分配函数之外,还有哪些系统库函数可能会使用malloc?

我的尝试: 在我的头文件顶部,我使用#define malloc mymalloc 来替换系统的malloc。 我使用库的 malloc 接口将系统的 malloc 替换为我自己的实现。

c arm malloc stm32 keil
1个回答
0
投票

C 标准库使用堆来处理 I/O,例如

printf
函数,请参见示例 使用 printf 消耗堆

如果您不希望程序使用堆,请避免使用像

printf
这样的文件上的函数,或者最好完全避免使用 C 标准库(如果可能的话)。

如果这是不可能的,那么您必须保留(最小)量的堆,以便 C std 库可以分配其结构。

如果您有权访问调试器,则可以精确定位堆访问,在

malloc
函数或在映射文件中找到的
h1_alloc
中设置断点,并检查调用堆栈,您可以找出谁使用了堆,最有可能的是 C 库初始化。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.