我在获取NewLib库提供的"vfprintf"时遇到问题,该环境基于在恩智浦K64 ARM Cortext-M4处理器上运行的FreeRTOS的多任务环境中工作。
代码是使用 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指针时崩溃。
你是说它崩溃是因为你取消引用的指针是 NULL? 如果是这样,那您为什么将其等同于 FreeRTOS 问题呢? 是因为当您不使用 FreeRTOS 时它可以工作,但在使用 FreeRTOS 时不起作用吗?
如果问题不是 NULL 指针,那么请注意,这一系列库函数使用了大量的堆栈。 您是否正在检查堆栈溢出? http://www.freertos.org/Stacks-and-stack-overflow-checking.html