RESETスイッチの実装について

秋月電子通商のH8/3069ボードにはリセット端子がなく、通常のリセットスイッチを実装できない。(これは個人的にはかなりの欠陥だと思うのだが…)そのためにモニターにはNMI端子を利用したリセット機能が実装されている。
更にこのスイッチはGOスイッチを兼ねる。くわしくはモニタに含まれるreset.cを参照するべきである。

回路

図のような回路でリセットスイッチを作る。リセットスイッチを実装しない場合、基板上のSW5がリセットスイッチとして使用できる。ただしチャタリングによって連打しやすいので注意を要する。

Goスイッチ

このスイッチはGoスイッチを兼ねる。即ち、モニタ内でスイッチが押された場合Goスイッチとして機能し、ユーザープログラムの実行中に押された場合リセットスイッチとして機能する。

この仕様は実験的である。

注意点

このリセットは100%成功するとは限らない。

リセットした直後にGOした場合、初期値つきのグローバル変数とstaticな初期値つきローカル変数は初期化されない。これらはS-recordファイルの展開時に初期化されるからである。初期値なしのグローバル変数やstatic変数はこの場合も0にクリアされることが保証される。
そのため、malloc系の関数はリセット後に誤動作することがある。printfやscanfなどの関数も内部でmallocを呼び出しているので注意が必要である。hprintf等は安全である。
オートロード機能は全ての変数を初期化するので、オートロードを有効にした上でリセット&Goするのは比較的安全であるといえる。


H8モニターのページへ