Previous: 11. 独立型ウォッチドッグタイマ |
Up: 11. 独立型ウォッチドッグタイマ |
Next: 11.1.1. アクセス可否の設定 |
サンプルプログラム |
iwdg_infinite_loop_1 |
ターミナルからの入力に応じてオンボードLEDの点滅速度をコントロールするプログラムです。マイコンボードへの回路の接続は不要です。
点灯消灯との間の時間をdelay_ms関数をループして実行させて稼いでいます。が、カウンタ(変数i)を減算するステップ幅(変数diff)を変更させて、カウンタが0以下になるまでのスピードを変化させています。
i = 500; while(i>0) ? { ??? delay_ms(1); ??? i = i - diff; ? } |
変数diffが大きくなればなるほど減算が早くなり、小さくなれば遅くなるわけですが、このプログラムには、diffがとる値の範囲を確認するルーチンがありません。そのためsを押し続けると、diffはやがて0になります。0になるとカウンタが減算されませんから無限ループに陥ります。ここで独立型ウォッチドッグがアンダーフローして、システムがリセットされます。
Previous: 11. 独立型ウォッチドッグタイマ |
Up: 11. 独立型ウォッチドッグタイマ |
Next: 11.1.1. アクセス可否の設定 |