ここ最近、ウォームリセットとコールドリセットという言葉に翻弄されていた。
というのも観点によってそれぞれの言葉が指す意味が違うからである。
辞書で調べてみると「パソコンの電源をOFFにしないで、再起動すること」となっている。
コンソールで「reboot」として再起動することを指している。
ただ、コンソールが動かない場合は強制的に電源OFFにすることもありうる。
電源を完全にOFFにして立ち上げなおすのは、これはコールドリセット。
電源を完全にOFFにすれば間違えなくコールドリセットではあるのだが、
そこまで至らないリセット行為をどこからウォームリセットと呼ぶのか。これが難しい。
今回困ったのは、マイコンの搭載されたチップのドキュメントでは、
チップにリセット信号が入った場合や電源が立ち上がった場合をマイコンのコールドリセットであると規定されている。
一方でウォッチドックタイマーのタイムアウト時や、リセットレジスタを叩いた場合はウォームリセットであるとされている。
この場合もマイコン内部の大半のブロックはリセットがかかることとなる。
一方のソフトウェア側である。
コールドリセットを要求した場合は、リセットレジスタを叩いてリセットするが、
ウォームリセットの内容はリセットハンドラにジャンプすることを指していた。
すなわち、ソフトで言うコールドリセットは、チップレベルで言えばウォームリセットに該当し、
ソフトで言うウォームリセットには、ハードウェアは何ら関与しないということである。
リセットハンドラへジャンプするというコードはなかなか見ない気がするが、
通電時に必要となるソフトウェア的な初期化処理は全部通ることとなるので、
これでもリセットとしては一応機能することとなる。
チップに入力されるリセット信号をアサートすることはチップ観点ではコールドリセットと言っているが、
電源を通電したままで、リセットICのマニュアルリセット信号を入力する場合、
デジタルICにとっては通電時と同様のリセットが実行されるとみられるが、
アナログ回路にとってみれば通電中の設定変更と何ら差がない。
こういうのもウォームリセットの範疇に含まれる可能性がある。
最初に書いたPCの例だと、(最近はないPCも多いが)リセットスイッチを押した場合、
電源は通電したままという観点ではウォームリセットかもしれないが、
マザーボード上で起きていることは電源OFF→ONのコールドリセットに限りなく近い。
あるシステムではウォッチドックタイマーのタイムアウトで一定の条件を満たす場合、
リセット発生前の状態を部分的に維持することをウォームリセットと呼んでいた。
ウォッチドック発生してもRAMの状態は揮発しないので、それを活用するんだったか。
一方でシステムをリセットすることを目的としてウォッチドックを発生させることもある。
ウォームリセットに入る条件を満たさないようにしてからウォッチドックをタイムアウトさせると。
これに相当する操作を外部のリセットICにマニュアルリセット信号を入力することで実現するシステムもある。
この場合は全てのデジタルICにリセットが入力され、マイコンのチップレベルでもコールドリセットとなる。
マイコン内部に留まるウォッチドックによりリセットより、より広い範囲にリセットがかかる。
これを設計した人がそこまで意識していたかはわからないけど、これで助かった事例があった。
マイコン以外のICで異常が発生した場合に、遠隔リセットができたからである。
もしもリセットICのマニュアルリセット信号を使っていなければ、
マイコン以外のICをリセットする方法は現場での電源再通電に限られたかもしれない。
あるシステムから見て、外部からリセットされることをコールドリセットって言ってるんだろうなと思った。
少なくともマイコンにとってはチップ外部からのリセットは全てコールドリセットだし、
チップ内部のハードウェア的なリセットであっても、
ソフトウェアから見ればコールドリセットになりうるという話なんでしょうね。