典型的用户症状:带浮点数的 sprintf 不工作或崩溃。
我在这里提供了完整的解释和所需的修复:
http://www.nadler.com/embedded/newlibAndFreeRTOS.html
为了说明最小测试应用程序中的崩溃,我提供了这个示例项目,可以在 Nucleo 429 上运行:
http://www.nadler.com/embedded/20190804_STM_malloc-Kaboom_demo.zip
在以下位置设置断点:
sysmem.c: errno = ENOMEM;
main.c,在默认任务中,在线 kaboomP1 = malloc(16);
欣赏烟花。
sysmem.c 中提供了对(其中一个)问题的评论
这些修复在上面链接的网页中进行了解释,并在这个更正的最小项目中进行了说明:
http://www.nadler.com/embedded/20191115_malloc-Kaboom_fixed.zip
如果 STM 可以:
- 确认他们了解这组错误
- 在ST32cubeIDE/CubeMX/etc的快速发布中修复它们。
好的,我们可以做梦,对吧?
2022-12-26 16:09:40
它不仅仅是线程安全(好像还不够糟糕)。
malloc 在 FreeRTOS 任务中完全失败,因为 STM 提供了不正确的 sbrk 函数。
这个论坛上至少有十几个帖子是关于这引起的问题的(尽管大多数人没有意识到他们为什么会崩溃、内存损坏或 sprintf 浮动失败)。
你告诉我们你已经意识到这些问题一年了,却从来没有费心去解决它们?
它不仅仅是线程安全(好像还不够糟糕)。
malloc 在 FreeRTOS 任务中完全失败,因为 STM 提供了不正确的 sbrk 函数。
这个论坛上至少有十几个帖子是关于这引起的问题的(尽管大多数人没有意识到他们为什么会崩溃、内存损坏或 sprintf 浮动失败)。
你告诉我们你已经意识到这些问题一年了,却从来没有费心去解决它们?
举报