• 締切済み

H8/3048FのWDTについて

H8/3048FのWDTについて 今学校でH8マイコンについて学習している者です。 その中でウォッチドッグタイマについて分からないことがあり、質問させていただきます。 プログラムはROMではなくRAMに書き込んでいます。そのプログラムの動作中にWDTが働いてLSIがリセットされるとRAMの中身もすべてリセットされてしまうのでしょうか? ハードウェアマニュアルには「LSI全体が初期化される」との記述がありましたので、個人的にはRAMも初期化されてしまうと考えています。 もしRAMまで初期化されてしまうのであれば、リセットがかかった際にプログラムをリスタートすることができず、再びマイコンにプログラムを転送しなければならないということなのでしょうか? また、どこかにプログラムを退避させることでリスタートすることが可能になるのでしょうか?

みんなの回答

回答No.4

>ハードウェアマニュアルには「LSI全体が初期化される」との記述がありましたので、個人的にはRAMも初期化されてしまうと考えています。 RAMはいかなる場合でも初期化はされません。WDTが発動すると、指定した割り込み処理から開始します。通常はリセット時のスタート番地になります。(H8は0番地から) ハードウェアマニュアルには 「リセットによって、CPU の内部状態と内蔵周辺モジュールの各レジスタがイニシャライズされます。」 と記述されています。CPUの内部状態とはコアの事をさします。 #1のumamimiさんが指摘されているとうり、RAMが破壊されている可能性があります。 したがってリセットではないからとそのまま使用はできません。 問題はWDTがかかった場合の処理をどうするかです。 (1) WDTと外部リセットの区別をする WDTの起動後の処理をする必要がある場合には、なんらかのマーキングが必要です。 マーキングはWDTのカウンター処理をする毎に実行します。 RAMにマーキングすると、RAMは電源投入時にランダムになるので運が悪いと電源投入時のパターンと区別がつかない可能性があります。CPUの周辺ICのレジスタを読む手段もあります。どうするかはケースバイ・ケースです。 (2) 周辺のLSIの処理。 リセットされるのはCPUだけで周辺ICはリセットされていません。どう対処するのかはハードウェアの問題です。

  • kaoaru
  • ベストアンサー率33% (42/127)
回答No.3

まさかデバッグ時にWDTを動作させているわけではありませんよね? 最終的な統合デバッグ時にはWDTも含めないといけないですけど、ブレークかけてもWDTは止まりませんのでリセットがかかってしまいます。 ブレークをかけるのであればWDTはOFFにしてデバッグするのが普通です。私の場合は。少なくとも、仕事でやってきている方はそうなんじゃないでしょうか? デバッグの仕方を考えてみたらいかがですか?

noname#159916
noname#159916
回答No.2

No.1 です。データシートを少し読みました。 内蔵RAM はSRAMとの事です。SRAM ならNo.1 に書いた通りの特性を示します。 WDT (やパワーオンリセットも)で 内蔵RAMを初期化する、というような表現も見付かりませんでした。 WDT のリセットが発生した時に、 その原因や、少なくともどのような処理をしていた時に発生したのか、の手がかりとして 実行中のタスクやプロセスのコードをその都度所定のSRAMに書き込みます。 異常発生時のハンドラ(WDT発生→リセットスタート→WDTフラグが立ってる で分岐) が、そのコードを読み出し解析する事で、それらの情報を得ることができます。

noname#159916
noname#159916
回答No.1

>RAMも初期化されてしまうと 普通、RAMは初期化されません。電源ON直後はデタラメの値だし 電源ONのままリセットがかかっただけならRAMの内容は前のままです。 H8/3048F のことはよく知りませんが、 これまでに触れたマイコンにはリセットでRAMが初期化されるものはありませんでした。 ただし、WDTが働いたという事は、プログラムが暴走してRAM内容を壊した可能性もあるので、 壊れてないかチェックサムやCRCで確認する方が信頼性は上がります。

関連するQ&A