zhouyou99 发表于 2025-6-29 21:20

STM32CubeIDE + FreeRTOS + newlib = HardFault

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

禁用浮点数格式化,增大任务栈和堆大小。
页: [1]
查看完整版本: STM32CubeIDE + FreeRTOS + newlib = HardFault