Mini210S 開発キット詳細URL
第IV章 ウォッチドッグを閉じるとC関数の呼び出し
第一節 ウォッチドッグ•背景知識
ウォッチドッグの役割は、CPUの動作を監視することで、ノイズやシステムエラーなどの障害が干渉した場合にできるだけ早く通常の仕事を再開することにサポートすることです。PWM、ウォッチドッグが共にタイマー機能があります、両者の違いは、ウォッチドッグのタイマタイミングをリセットシグナルが発送できます、PWMタイマがその機能がありません。後の章では詳しい解説があります、ここでは閉じるのみです。
第二節 プログラム説明
完全なコードは、ディレクトリ2.led_s_wtdご参照ください。
1. start.S
1.led_s_wtdコードと比較して、コード2.led_s_wtdでは次の二点が違います:
1) 手動でシャットダウンウォッチを閉じて、レジスタWTCONに0を書き込みのみ;
2) C関数を使用して遅延機能を実現し、そして、IROM硬化コードにスタックはに設定するかどうかをテストします;
普通のC言語遅延関数が一つ含みます。コードは次のとおりです:
void delay(int r0)
{
volatile int count = r0;
while (count--);
}
コンパイルがC関数を呼び出す時、引数の数が4つを超えない場合、r0〜r3の4つのレジスタを使用して引数を発送します;4つ以上な場合ではの残りの他の引数はスタックを介して発送します、delay()は一つの引数だけで、r0dで発送します。また、volatileはコンパイラが自動最適化でこのコードを消去し遅延機能を実現で着ないを防ぐために、追加するものです。 Makefileとwrite2sdは前のプログラムに差別がないので、以後、ディレクトリとコードは変更がない場合、特に説明は致しません。
第三節 コードコンパイルとプログラミングの実行
SDカードをPCにアクセスして、Fedora端末で下記のコマンドを実行します:
# cd 2.led_s_wtd
# make
# chmod 777 write2sd
# ./write2sd
makeを実行後、210.binファイルは生成します、./write2sd実行し、.binはsdカードセクタ1にプログラミングします。
第四節 実験現象
SDカードをMini210Sに挿入して、SDカードを起動・通電します。次の現象を確認できます: LEDが通常点滅します、、手動でウォッチドッグが成功シャットダウンした、同時にIROMのコードがスタックを設定していることを証明します。ここでの要点は:なぜプログラムがC言語の関数が正常に呼び出すことから、IROMコードにスタックを設定したと証明できますか?それはコンパイルがC関数を呼び出す時、引数の受け渡し、現在状態保存と正常戻り、一時的な変数の保存などにスタックが必要で、delay()関数でcount一時的な変数で、プログラムが正常に実行するとスタックの設定を証明できます。
---続く