vfprintf在基于FreeRTOS的多任务环境中崩溃,该环境在NXP K64 ARM Cortex-M4上运行

时间:2017-03-27 06:35:56

标签: arm stderr freertos newlib

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

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

FreeRTOS配置为启用configUSE_NEWLIB_REENTRANT开关。

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

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

xNewLib_reent .__ sf [2] ._ p指针的默认值为NULL,不在其他任何地方分配。

对此方面的任何建议都表示高度赞赏。

更新:在硬故障ISR中我从堆栈帧中提取PC并检查调试器中的汇编视图(即Eclipse CDT独立调试器)我可以看到它在解除引用时崩溃了_p指针。

1 个答案:

答案 0 :(得分:1)

你是说它崩溃是因为你要解引用的指针是NULL吗?如果是这样,那你为什么把这等同于FreeRTOS问题呢?是因为它可以在你不使用FreeRTOS时起作用,但是当它没有使用时它会起作用吗?

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