私はSTM32F446、RTX、3つのスレッド(私が宣言したメイン+2)+もちろんアイドルの1つのプロジェクトを持っています。メインスレッドは、2つのスレッドを起動した後に待機状態に入るので、2つのスレッドしか実行していません。 RTXにはラウンドロビンが無効になっています。アプリケーションが行うことは、SPIを介してBluetoothモジュールと通信することです。STM32 RTX Usage Fault PSP 0x00000020
私の問題は、SPI転送中(あるスレッドで開始され、他のスレッドで開始される)に、MCUがUsageFault_Handlerにクラッシュし、スレッドの1つ(必ずしも同じではない)がオーバーフローすることが示されることがあります。今、私はハードフォールトをデバッグする方法について読んだことがありますが、問題はすべてのメソッドがMSP/PSPアドレスに依存していて、PSPは0x00000020です。 誰かがこれまでに似たようなものに直面したことはありますか?何が間違っているかもしれないかに関するアイデア?
LE:コードはRTXではなくFreeRTOSで動作することを学んだことがあります。コードはクリティカルセクションを使用します。 FreeRTOS(BASEPRI)と同じRTXのクリティカルセクションに対して同じ実装を使用しようとしましたが、多くの場合UsageFaultになります。 私は、RTXがコード内のSVCを広く使用していることを知っています。
クリティカルセクションを別々に実装する必要がありますか? FreeRTOSとRTXの間に問題を引き起こす可能性のある他の相違点は知っていますか?
よろしく、セバスチャン
おそらくスタックがオーバーフローしています。あなたがPCのようなuCをプログラムするなら、あなたは再び同じような問題に遭遇します –
@ PeterJ_01:あなたのコメントの2番目の文が何を意味するのか分かりません。 – Clifford