打印
[STM32L0]

动态内存分配问题

[复制链接]
429|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
米多0036|  楼主 | 2024-12-9 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
堆大小不足
CubeMX默认生成的堆大小可能不足以支持复杂应用如FreeRTOS任务或DMA。

问题表现:malloc或任务创建失败。
解决方法:
修改 STM32Fxxx_FLASH.ld 文件,增加 .heap 段大小。
ld
复制代码
_estack = ORIGIN(RAM) + LENGTH(RAM);  /* 堆栈顶 */
_Min_Heap_Size = 0x200;               /* 堆大小 */

使用特权

评论回复
沙发
结合国际经验| | 2024-12-31 23:09 | 只看该作者
malloc 或任务创建失败,通常是因为默认的堆大小太小。

使用特权

评论回复
板凳
小夏天的大西瓜| | 2024-12-31 23:25 | 只看该作者
超限了应该

使用特权

评论回复
地板
tpgf| | 2025-1-6 17:10 | 只看该作者
大的内存的分配和小的内存的分配使用的函数应该是不相同的

使用特权

评论回复
5
heimaojingzhang| | 2025-1-7 20:45 | 只看该作者
在STM32中实现动态内存分配时,首先需要确保所请求的内存大小不会超过在链接映射文件(.S文件)中设定的堆大小

使用特权

评论回复
6
keaibukelian| | 2025-1-7 23:03 | 只看该作者
如果分配的内存超过了在链接映射文件(.S文件)中设定的堆大小,程序将无法成功运行并可能导致硬件异常

使用特权

评论回复
7
paotangsan| | 2025-1-8 09:49 | 只看该作者
如果.S文件中设置的最大可分配字节为0x4000,那么任何尝试分配超过这个大小的内存都会导致失败

使用特权

评论回复
8
renzheshengui| | 2025-1-8 12:05 | 只看该作者
对于频繁且小量的内存分配,建议避免使用malloc和free,因为这可能会导致内存碎片,从而减少可用的堆内存

使用特权

评论回复
9
wowu| | 2025-1-8 14:37 | 只看该作者
对于较大的内存块或不频繁的内存分配,使用malloc和free是合适的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

1397

帖子

0

粉丝