[STM32F4] STM32CubeIDE + FreeRTOS + newlib = HardFault

[复制链接]
 楼主| zhouyou99 发表于 2025-6-29 21:20 | 显示全部楼层 |阅读模式
STM32CubeIDE + FreeRTOS 在多线程环境下调用 newlib nano 的 sprintf("%f") 时崩溃。
任何 strtok、sprintf 及其他 malloc 调用都会崩溃。此外,在中断服务程序(ISR)中使用 USB-LL 的 malloc 调用也不稳定。
即使启用 newlib 的可重入(reentrant)支持也无济于事。
尝试了 http://www.nadler.com/embedded/newlibAndFreeRTOS.html 的 nadler 解决方案,但未能奏效。
GitHub 上的解决方案 https://github.com/DRNadler/FreeRTOS_helpers 同样无效。
newlib 的实现与 ST 的堆管理器会导致 HardFault。
只有 C/C++ 的标准库(StdLib)能稳定运行,但会显著增加代码体积和内存占用。
有方法解决这个问题吗?

flycamelaaa 发表于 2025-7-1 17:07 | 显示全部楼层
newlib库的线程安全实现与FreeRTOS内存管理机制存在冲突。
powerantone 发表于 2025-7-1 18:08 | 显示全部楼层
推荐替换为线程安全的轻量级库。
stormwind123 发表于 2025-7-1 19:18 | 显示全部楼层
禁用浮点数格式化,增大任务栈和堆大小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

38

主题

38

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部