プログラムがMSP430でウォッチドッグタイマーを停止するのはなぜですか?


11

MSP430の多くのサンプルプログラムの最初の行は次のとおりです。

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

なぜ彼らはこれを行うのですか?

回答:


15

ウォッチドッグタイマー(WDT)はデフォルトでオンになっています。より複雑なアプリケーションで使用すると便利ですが、多くの新しいユーザーがトリップします。多くの場合、彼らはコード内でWDTを処理しないか、WDTイベントを処理するための割り込みサービスルーチン(ISR)を含まないため、チップがリセットし続けると非常にイライラします。さらに、サンプルプログラムは、ほとんどの場合、WDTをデモンストレーションしようとしていないため、オフになっています。

編集:ウォッチドッグタイマーは「デッドマンズスイッチ」と名付けられたかもしれません。デフォルトの動作は、ファームウェアが定期的にすべてが正常に実行されていることを通知しない限り、マイクロコントローラーをリセットすることです。これは「犬に餌をやる」または「犬を蹴る」として知られています。このように、ファームウェアがループでスタックしたり、予期したとおりに動作を停止した場合、ウォッチドッグは給電されず、チップをリセットします(できれば新しい動作状態にリセットします)。

また、WDTを定期的な割り込みとして使用して、想像できる他のタスクを実行することもできます。関連するISRを記述するだけです。


+1ありがとう、iと他の読者は調べることができますが、WDTがチップをリセットする理由の非常に簡単な理論的根拠を知っておくといいでしょう。(追加することを心配しないでください、あなたの答えはそのまま受け入れるのに十分です(他の可能な答えをさらに数時間待った後))
ネクロマンサー14

ウォッチドッグタイマーとは何なのか全く見当もつかない絶対的な初心者であるという質問で言及すべきだったと思います:)
necromancer

2
@necromancerああ、心配ない、関連情報を追加した。
サミュエル14

2
サミュエル-ほとんどすべての場合、ISRを使用してWDTをリセットしないでください。それはほとんど常に間違ったことです。割り込みは、プログラムの他の部分がラ・ラ・ランドでオフになっている間、陽気に続けることができます。場合によっては可能/必要です(ISRとファームウェアの第2レベルを効果的に設定するファームウェアの他の部分との間の通信)が、最初のアプローチとして初心者に提案すべきではありません。
スペロペファニー14

9

人が誤ってWDTをトリップするというサミュエルの主張に加えて、最初に無効にする必要がある別の重要な理由があります。

アプリケーションが通常タイマーを正しくリセットできる場合でも、2つの理由から、初期化コード中にタイマーをリセットできない場合があります。

  • 初期化には、1つのWDTティックよりも時間がかかる場合がありますが、割り込みを無効にする必要があります。これは、たとえばタイマーISRに依存してタイマーをリセットすると、無限のブートループが発生する可能性があることを意味します。
  • すべてのMCUのタイマーレジスタの状態を必ずしも知っているわけではありません(つまり、レジスタが0で開始されない可能性があるため、次のティックは予想よりはるかに早くなる可能性があります)。

そのため、最初に行うこととしてWDTを無効にすることをお勧めします。 有効にしていない場合でもます

使用したい場合は、初期化コードの最後のステップとして、割り込みをオンにする直前に再度有効にすることができます。


+1回答に追加していただきありがとうございます。私はあなたが使用して初期化する前にそれを無効にすることができますことを発見int _system_pre_init(void)する前に実行される機能を、main
ネクロマンサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.