ほぼリアルタイムのOS-2

ツールの準備できたので、使用することでき、使用する必要があります。



以前は、メインタイマーについていくつかの言葉がありました。



ボードには、外部パルス発生器(クロックDS1307)があります。 ジェネレーターは4 kHzの周波数に調整され、パルスはINT0レッグ(外部割り込み)に巻き付けられます。



この割り込みは、システムのメインタイマーとして使用されます。 どうやって? はい、とても簡単です:



unsigned int calc_delay; //



ISR(INT0_vect) {

if (calc_delay > 41) { // 10

calc_delay = 0;

dispatchTimer(); //

} else

calc_delay++;

}



* This source code was highlighted with Source Code Highlighter .








avr-gccのISRマクロは、割り込みハンドラーを記述しています。 この関数は、1秒間に4096回呼び出されます。 そして、タイマーマネージャーは10ミリ秒ごとに呼び出されます(小さなエラーが発生します)。

希望する人は、内蔵タイマーまたはタイマーの別の期間を使用できますが、この本質は変わりません。



また、ADC(キーボードポーリング)およびUART(コンピューターとの通信)割り込みも使用します。 ミニマリズムもあります-値をバッファに入れて続行します。 主な作業は、プログラムのメインサイクルで実行されます。



int main() {

init();



for (;;) {

dispatchMessage();

}

}



* This source code was highlighted with Source Code Highlighter .








コメントする必要さえないと思います。 はい、初期化手順には小さいながらも非常に重要なコードがあります。



//



setHandler(MSG_LCD_REFRESH, &refreshLCD);

setTimer(MSG_LCD_REFRESH, 0, 20);



setHandler(MSG_ADC_CYCLE, &readKey);

setHandler(MSG_KEY_REPEAT, &repeatKey);



setHandler(MSG_KEY_PRESS, &analyseKey);



setHandler(MSG_1W_TEMP, &owTemp);

setTimer(MSG_1W_TEMP, 1, 10);



* This source code was highlighted with Source Code Highlighter .








一言で言えば-ハンドラーを設定し、タイマーを設定します。 その後、システムはすでに動作しています-タイマーを監視し、イベントを作成します。 イベントは受信順に処理されます。 ハンドラー関数はアクションを実行し、タイマーを再度設定します(必要な場合)。



たとえば、これは、最も単純な画面再描画関数がどのように見えるかです:



unsigned char Disp[2][20]; //



unsigned char refreshLCD(msg_par par) {

lcd_gotoxy(0,0);

lcd_puts(Disp[0]); //

lcd_gotoxy(0,1);

lcd_puts(Disp[1]); //



setTimer(MSG_LCD_REFRESH, 0, 20);

return (0);

}




* This source code was highlighted with Source Code Highlighter .








画面が更新され、キーボードが分析され、センサーがポーリングされます。



次のセクションはユーザーインターフェイスです。






All Articles