stm32 cubeIDE FreeRTOS printf 浮点数打印错误

1、在工程使用printf打印浮点数时报错

printf(" value = %.4f\r\n",value);

assertion "REENT malloc succeeded" failed: file "/build/gnu-tools-for-stm32_9-2020-q2-update.20201001-1621/src/newlib/newlib/libc/stdlib/dtoa.c", line 234

简单处理:printf时打印浮点数报错,不使用浮点数打印输出即可。

2、网上搜索答案好多遇到相同问题

(资源来自网络:https://community.st.com/s/question/0D50X0000BB1eL7SQJ/bug-cubemx-freertos-projects-corrupt-memorynewlib and FreeRTOS)

stm32 cubeIDE FreeRTOS printf 浮点数打印错误_第1张图片stm32 cubeIDE FreeRTOS printf 浮点数打印错误_第2张图片

3、如何解决(使用第三方的API补丁:heap_useNewlib_ST.c)

下载:heap_useNewlib_ST.c

添加进工程目录:Third_Party/FreeRTOS/portable/MemMang/

stm32 cubeIDE FreeRTOS printf 浮点数打印错误_第3张图片

删除之前的heap和mem管理文件,上图的heap_4.c和下图的sysmem.c

 stm32 cubeIDE FreeRTOS printf 浮点数打印错误_第4张图片

 修改RTOS配置文件,将configUSE_NEWLIB_REENTRANT 0,配置成1(Third_Party/FreeRTOS/Source/inlclude/FreeRTOS.h)

 这一步如果使用的是cubeIDE也可以直接在软件中进行手动配置

stm32 cubeIDE FreeRTOS printf 浮点数打印错误_第5张图片

4、结果(可以正常输出浮点数)

[09:44:34.206]收←◆ value = 1.3749

[09:44:34.708]收←◆ value = 1.3887

5、疑问(第三方API和系统兼容以及资源管理和稳定性该如何权衡)

你可能感兴趣的:(STM32,stm32,arm,嵌入式硬件)