目次

タスク分割

 RTOSのシステムコールの使い方が理解でき、動作を
 タスクとして記述できても、タスクが実現する内容
 を切り出すのは、意外に大変な作業です。

 システムを実現するため、タスクを分割するには
 イベントとイベントに対応した処理に分け、それ
 をタスクに割り当てると考えるとよいでしょう。


タスクの種類

 タスクは、動作により3種類に統合できます。
  1. Standard(スタンダード)
  2. One Shot(ワンショット)
  3. 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 */ }
目次

inserted by FC2 system