2396864_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2396864_ja-JP

2396864_ja-JP

S32K358 + FreeRTOS: PendSV_Handler実行中にランダムなハードフォルトが発生

チームの皆さん、こんにちは。

FreeRTOSを実行しているS32K358で、ランダムなハードフォルトが発生しています

アプリケーションは長時間正常に動作しますが、突然フリーズします。システムが実行を停止した後、ソフトウェア・ウォッチドッグ(SWT)はサービスされず、最終的にコントローラがリセットされます。

障害は即座に発生するわけではなく、約1~2時間の連続実行後に発生する。

障害発生後に停止すると、コールスタックには以下が表示されます。

PenSV_Handler()

HardFault_Handler()

レジスタ値:

LR = 0xA5A5A5A5

PC = 0x00407BD9

LR = 0xA5A5A5A5は、有効な戻りアドレスというよりは、メモリ初期化パターンのように見えます。

その他の登録簿:

R0 = 0x204011A8

R3 = 0x2040012C

R12 = 0x20400010

ご提案やデバッグに関するアドバイスなど、何でもいただければ大変ありがたいです。

Re: S32K358 + FreeRTOS: Random HardFault during PendSV_Handler

こんにちは、 @nirmal_masilamani さん

FreeRTOSのコンテキスト切り替え時に保存されたタスクコンテキストが破損しているようです。
PendSVはFreeRTOSによってコンテキスト切り替えに使用されるため、PendSV_Handler()内でHardFaultが発生した場合、多くの場合、スケジューラが無効なタスクコンテキストを復元しようとしていることを意味します。
考えられる根本原因の一つは、タスクスタックオーバーフローです。タスクのスタックサイズを増やし、FreeRTOSのスタックオーバーフロー検出機能を有効にすることをお勧めします。

configCHECK_FOR_STACK_OVERFLOW

実装: vApplicationStackOverflowHook()。

さらに、uxTaskGetStackHighWaterMark()を使って各タスクの残りのスタック空間を定期的に監視することもできます。これにより、故障が発生する前にスタック限界に近いタスクを特定するのに役立ちます。

よろしくお願いいたします。

ダニエル




Tags (1)
No ratings
Version history
Last update:
15 hours ago
Updated by: