-2

我在获取 NewLib 库提供的“vfprintf”时遇到问题,该库在基于 NXP K64 ARM Cortext-M4 处理器上运行的 FreeRTOS 的多任务环境中工作。

代码使用 arm gcc 编译器编译。

FreeRTOS 配置为启用 configUSE_NEWLIB_REENTRANT 开关。

我已经提供了 _write_r 系统调用,因此最终数据将被传递到 MCU 的 UART 之一。

访问“fp->_p”时会在 __sfvwrite_r 中触发硬故障异常。在这种情况下, fp 是默认分配给 xNewLib_reent.__sf[2] 的标准错误。

xNewLib_reent.__sf[2]._p 指针的默认值为 NULL,并且未分配到其他任何地方。

任何有关这方面的建议都将受到高度赞赏。

更新:在硬故障 ISR 中,我从堆栈框架中提取 PC,并通过检查我的调试器(即 Eclipse CDT 独立调试器)中的程序集视图,我可以看到它在取消引用 _p 指针时崩溃。

4

1 回答 1

1

您是说它崩溃是因为您要取消引用的指针为 NULL 吗?如果是这样,那您为什么将其等同于 FreeRTOS 问题?是因为它在您不使用 FreeRTOS 时有效,但在使用时无效?

如果问题不是 NULL 指针,那么请注意这一系列库函数使用了大量的堆栈。你在检查堆栈溢出吗? http://www.freertos.org/Stacks-and-stack-overflow-checking.html

于 2017-03-27T19:37:13.977 回答