皆さん、こんにちは。S32K144ウォッチドッグモジュールをデバッグしている際、MCUをリセットする前にWdg_Wdog0_Isr()割り込みを入力するのが適切です。しかし、デバッグプロセス中に、MCUをリセットする前にWdg_Wdog0_Isr()割り込みを入力していませんでした。以下は私のS32DSプロジェクトとEB設定です。問題箇所を特定していただけますか?ご協力ありがとうございます!
こんにちは。ご回答ありがとうございます。ウォッチドッグモジュールに関する私の理解は少し偏っているかもしれません。私の理解では、Wdg_SetTriggerCondition()関数で設定されたタイムアウト期間内にウォッチドッグにフィードが供給されない場合、つまりWdg_SetTriggerCondition()が再度呼び出された場合、ウォッチドッグ割り込みがトリガーされ、その後割り込みが生成されます。その後、インターネット上のブログ(図に示すように)で、割り込みモードでは、ウォッチドッグに最初のフィードが間に合わないとウォッチドッグ割り込みが生成され、2回連続してウォッチドッグフィードがタイムアウトした後にのみMCUがリセットされると書かれていました。どちらが正しいのか教えていただけますか?
こんにちは!以前のモジュールはすべてこのバージョンに基づいて構成されており、残っているモジュールは1つか2つだけです。今後S32K3シリーズのチップを使用するときは、最新のMCALバージョンに切り替える予定です。現状では、プログラムの電源投入後、一定時間ごとにライトが1回点滅します(非常に速く点滅します)。ただし、下図のように、ウォッチドッグ通知機能に遅延機能を追加しましたが、それでもライトは非常に速く点滅します。(この遅延機能をメイン関数でテストしたところ、このライトの点滅速度よりも明らかに遅いです)。原因は何でしょうか?
こんにちは。プログラムを数回実行し、実行状態にしたところ、割り込みでプログラムが常に停止してしまうことがわかりました。通知に点滅ライトのコードを追加すると、ライトが常に点灯していることがわかりました。S32DSの一時停止ボタンをクリックすると、プログラムは下図の位置で停止し、ライトが消灯します。原因の分析を手伝っていただけますか?設定の問題でしょうか?
Hi @夏超
通常、遅延やコードをコールバック関数内に直接配置することは、パフォーマンスと応答性に影響を与える可能性があるため、お勧めしません。ただし、次のような実装を試みることもできます。
#define NUM_OF_NOTIFICATIONS 10U
#define TIMEOUT_WDG 5000U
uint8 count = 0U;
int main(void)
{
...
Wdg_SetTriggerCondition(TIMEOUT_WDG);
hile (count < NUM_OF_NOTIFICATIONS)
{
/* Set the Trigger Condition after the Wdg notification is called */
if (NotificationCount == 1U)
{
Wdg_SetTriggerCondition(TIMEOUT_WDG);
Dio_WriteChannel(DioConf_DioChannel_RGBLED0_BLUE, STD_HIGH);
delay(TIMEOUT_WDG / 5);
Dio_WriteChannel(DioConf_DioChannel_RGBLED0_BLUE, STD_LOW);
count++;
u8NotificationCount = 0;
}
if (count == 9)
{
Wdg_SetTriggerCondition(TIMEOUT_WDG);
Dio_WriteChannel(DioConf_DioChannel_RGBLED0_GREEN, STD_HIGH);
}
}
...
}
このコード例では、各通知の受信後にトリガー条件を設定し、それに応じて LED ステータスを更新します。遅延(TIMEOUT_WDG / 5)は、短い遅延を作成するために使用されますが、理想的には、コールバック関数内の問題を回避するために、これをノンブロッキング方式で処理する必要があります。
Hi @夏超
デバッグ セッション中で、ウォッチドッグをデバッグ モードで実行できるようにしない場合、WDG カウンタはインクリメントされません。その結果、タイムアウト値に到達せず、したがって割り込みはトリガーされません。
実行時に割り込みがトリガーされるかどうかを監視するには、割り込みが発生するたびにLEDを点滅させるなどの簡単な方法を使用できます。これにより、割り込みが正しく実行されていることを視覚的に確認できます。
Hi @夏超
ウォッチドッグをデバッグ モードで実行できるようにすることで、デバッグ セッション中に WDG カウンターがカウントを続行できます。これは、割り込み関数が正しく呼び出されていることを検証するのに役立ちます。ただし、WDG が有効になると、そのカウンタは増加し続けます。ブレークポイントにヒットするか、[ステップ オーバー] オプションを使用すると、WDG カウンターがオーバーフローし、リセット要求がトリガーされます。
BR, VaneB
谢谢您的回复!但当我失能Wdg Runs In Debug Mode这个选项,Wdg_Wdog0_Isr()还是不能进入,能否进一步帮我分析下原因,谢谢您了!
Hi @夏超
申し訳ございませんが、画像は添付されていないようです。再送していただけませんか?さらに、古いソフトウェアバージョンを使用していることに気づきました。最新バージョンをテストして、問題が解決しないかどうかを確認するのを手伝ってもらえますか?
最新のソフトウェアリリースは、 Real-Time Drivers for S32K1 → Automotive SW - S32K1_S32M24x - Real-Time Drivers for Cortex-M からダウンロードできます。