目次
前
次
タスク分割
RTOSのシステムコールの使い方が理解でき、動作を
タスクとして記述できても、タスクが実現する内容
を切り出すのは、意外に大変な作業です。
システムを実現するため、タスクを分割するには
イベントとイベントに対応した処理に分け、それ
をタスクに割り当てると考えるとよいでしょう。
タスクの種類
タスクは、動作により3種類に統合できます。
- Standard(スタンダード)
- One Shot(ワンショット)
- Cycle(サイクル)
Standard task
Standardで分類するタスクは、システムコールを使わずに
USOがREADY->RUN、RUN->READYと状態遷移させます。
通常の関数と同じように、定義します。
I/Oの状態を見て、LEDを点灯、消灯するタスクを例と
すると、以下のように記述します。
#define OFF 0
#define ON OFF+1
void tsk8_proc(void)
{
if ( SW_BIT == ON ) {
LED_BIT = LED_ON ;
} else {
LED_BIT = LED_OFF ;
}
}
One Shot task
One Shotで分類するタスクは、自らRUN->SUSPENDと状態遷移させます。
1回だけ処理を実行して終了するか、他のタスクにREADYにして
もらって自分で終了する用途で利用します。
LEDを消灯するタスクは、以下です。
void tsk2_proc(void)
{
LED_BIT = LED_OFF ;
slp_tsk();
}
Cycle task
Cycleで分類するタスクは、システムコールwai_tskを使い
周期的に動作します。
1秒ごとにLEDを点滅するタスクは、以下です。
unsigned char count ;
void tsk1_proc(void)
{
LED_BIT = count & 1 ; /* 点滅 */
count++ ;
wai_tsk( 100 ); /* 1000ms */
}
目次
前
次