Instiq
第1章 · プロセッサとコンピュータ構成·v1.0.0·更新 2026/7/10·読了目安 約14分

変更要約: 初版

1.4クロック・タイマ・ウォッチドッグ

この節の要点

発振器PLL(位相同期回路)によるクロック生成・分周、時間計測やイベント生成を担うタイマ/カウンタPWM出力、そしてソフトウェアの暴走を検出し自動リセットするウォッチドッグタイマ(WDT)を使った信頼性設計の判断力を学びます。

組込みシステムの信頼性は、正常時の性能設計だけでなく「異常が起きたときにどう検出し復旧するか」の設計にも大きく依存します。この節ではクロックの生成・タイマによる時間計測という基礎の上に、ウォッチドッグタイマ(WDT)によるソフトウェアの暴走検出と自動リセットという、無人稼働する組込み機器に不可欠な信頼性設計を学びます。「WDTのタイムアウト値をどう設定すべきか」「WDTのリセットをどこで行うべきか」は、いずれも定義暗記ではなく設計判断として問われます。

1.4.1発振器・PLL・分周

  • 発振器(クリスタル/水晶振動子)=水晶の圧電効果を利用し、安定した基準周波数のクロック信号を生成する部品。CPU内部の動作は、この基準クロックに同期して各回路が状態を更新することで進む。
  • PLL(フェーズロックドループ/位相同期回路)=入力された基準クロックの周波数を、逓倍(整数倍)してより高いクロック周波数を生成する回路。分周=逆にクロック周波数を整数で割ってより低い周波数を生成する処理。CPUコアは高クロックで高速動作させつつ、周辺回路は分周した低クロックで動作させることで、回路全体の消費電力とノイズを抑えつつ必要な性能を確保できる。

1.4.2タイマ/カウンタ・PWMとウォッチドッグタイマ

  • タイマ/カウンタ=クロックの周期をカウントし、一定時間の経過検出や周期的な割込み生成に使うハードウェア。PWM(パルス幅変調)=タイマを利用し、一定周期内で信号がHighである時間の割合(デューティ比)を変化させることで、モータ速度やLED輝度をアナログ的に制御する出力方式。
  • ウォッチドッグタイマ(WDT)=独立したカウンタが一定時間ごとにカウントダウン(またはカウントアップ)し、ソフトウェアが定期的に「まだ正常に動作している」ことを示すWDTクリア(キック)を行わないと、タイムアウトしてCPUを強制的にリセットする仕組み。ソフトウェアの無限ループやデッドロックなどの暴走を自律的に検出し復旧させる、無人稼働機器に不可欠な信頼性設計。
試験ポイント

「PLLは逓倍で高クロック生成、分周は低クロック生成」「WDTは定期的なクリアが途切れるとタイムアウトしCPUを強制リセット」「WDTクリアはメインループの正常性を反映する場所で行うべき」が最頻出です。WDTクリアをどこに置くべきかという設計判断が問われます。

あなたは無人で長期間稼働する屋外センサ機器のファームウェアを設計しています。要件として「メインループが何らかの原因(センサドライバのバグによる無限ループ等)で停止しても、自律的に復旧できること」が課せられました。ここでウォッチドッグタイマ(WDT)を採用しますが、WDTクリアをどこに置くかが設計の分かれ目になります。もし「一定時間ごとに発生するタイマ割込みハンドラの中で無条件にWDTをクリアする」設計にすると、たとえメインループがセンサドライバのバグで無限ループに陥っていても、タイマ割込み自体は正常に動き続けるためWDTは定期的にクリアされ続け、暴走が検出されずタイムアウトが永久に発生しません。これはWDTの本来の目的(メインループの正常性の検出)を果たせていない設計です。適切な設計は、メインループの正常な1周が完了した箇所(センサ読み取り→処理→出力の一連の処理が一巡した地点)でのみWDTをクリアすることです。こうすれば、メインループが無限ループで停止した瞬間からWDTクリアが途絶え、設定したタイムアウト時間の経過後に確実にCPUがリセットされ、機器が自律的に復旧します。またWDTのタイムアウト値も、短すぎるとメインループの正常な処理時間の揺らぎ(センサ読み取りの遅延等)で誤ってリセットが発生し、長すぎると暴走から復旧するまでの時間が長引くため、メインループの最悪実行時間に十分なマージンを加えた値に設定する判断が必要です。

要素役割設計上の注意点
PLL基準クロックを逓倍し高クロックを生成高速化と引き換えに消費電力/ノイズが増える
分周クロックを整数で割り低クロックを生成周辺回路の消費電力を抑える
WDT定期クリアが途切れたらCPUを強制リセットクリア箇所はメインループの正常完了点に置く
注意

ひっかけ: 「WDTのクリアはタイマ割込みハンドラの中で行えばよい」は誤りです——タイマ割込みはメインループの状態に関係なく周期的に発生し続けるため、メインループが暴走してもクリアが途切れず暴走を検出できません。WDTクリアはメインループの正常な1周が完了した箇所で行う必要があります。また「PLLは分周と同じ役割を持つ」も誤り=PLLは逓倍で高クロックを生成、分周は逆に低クロックを生成する処理で役割が逆です。

クロック源とWDTの図。
時間を刻み監視する

1.4.3この節のまとめ

  • PLLは逓倍で高クロック生成、分周は逆に低クロック生成。用途で使い分け消費電力を抑える
  • WDTは定期クリアが途切れるとタイムアウトしCPUを強制リセットし、ソフトウェア暴走から自律復旧させる
  • WDTクリアはメインループの正常な1周完了点に置くべき。タイマ割込み内での無条件クリアは検出漏れを招く

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. 無人で稼働する屋外センサ機器で、メインループがセンサドライバのバグにより無限ループに陥っても自律的に復旧できるようにしたい。ウォッチドッグタイマ(WDT)のクリア処理を配置する場所として最も適切なものはどれか。

Q2. CPUコアを高速動作させつつ、周辺回路の消費電力とノイズを抑えたいという要件がある。クロック設計として最も適切な組み合わせはどれか。

Q3. ウォッチドッグタイマ(WDT)のタイムアウト値の設定に関する判断として最も適切なものはどれか。

理解度を確認第1章「プロセッサとコンピュータ構成」の問題を解く