-2

NXP K64 ARM Cortext-M4 プロセッサで実行されている FreeRTOS に基づくマルチタスク環境で動作する NewLib ライブラリによって提供される「vfprintf」を取得する際に問題が発生しています。

コードは arm gcc コンパイラを使用してコンパイルされます。

FreeRTOS は、configUSE_NEWLIB_REENTRANT スイッチが有効になるように構成されています。

_write_r システム コールを提供したので、最終的にデータは MCU の UART の 1 つに渡されます。

「fp->_p」にアクセスすると、__sfvwrite_r でハードフォールト例外がトリガーされます。この場合、fp はデフォルトで xNewLib_reent.__sf[2] に割り当てられる stderr です。

xNewLib_reent.__sf[2]._p ポインターのデフォルト値は NULL であり、他の場所には割り当てられません。

この点に関するアドバイスは大歓迎です。

更新: ハード フォールト ISR で、スタック フレームから PC を抽出し、デバッガー (つまり、Eclipse CDT スタンドアロン デバッガー) でアセンブリ ビューを確認すると、_p ポインターを逆参照するときにクラッシュしていることがわかります。

4

1 に答える 1