我在使用基于在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指针。
答案 0 :(得分:1)
你是说它崩溃是因为你要解引用的指针是NULL吗?如果是这样,那你为什么把这等同于FreeRTOS问题呢?是因为它可以在你不使用FreeRTOS时起作用,但是当它没有使用时它会起作用吗?
如果问题不是NULL指针,那么请注意这个库函数系列使用了大量的堆栈。你在检查堆栈溢出吗? http://www.freertos.org/Stacks-and-stack-overflow-checking.html