タスクの状態遷移

【PICROSのタスクとは?】

 PICROSでは、ユーザ側の個々のプログラム単位を「タスク」と呼び、
これが処理の基本単位となります。タスクとPICROSの間は、サービス
マクロ命令によりやり取りをします。
そして特にユーザ側で割り込み禁止にしない限り、タスクの実行中は
割り込み許可状態となっており、いつでも割り込みを受け付けられる
様になっています。


【タスクの状態と遷移】

タスクの状態には、大別すると停止状態、実行待ち状態、実行中
の3つがあり、各状態の遷移はマクロ命令やイベントによって
引き起こされます。
しかし、実際には、それぞれの間にはもう少し中間の状態が存在し、
概略のタスク状態遷移の流れは下図のようになっています。





(A)タスクの起動
タスクの起動方法は、イベント駆動でその方法には2つあります。
 ・TRIGマクロによる単純起動
   指定したタスクをReady状態にします。
 ・RQSTマクロによる待ち合わせ起動
   指定したタスクの終了を待ち合わせる起動です。

(B)タスクの終了
またタスクの終了方法はEXITマクロによる終了のみとなります。

(C)待ち合わせ
起動と終了の間で待ち合わせの状態があり、3種類の待ち合わせが
あります。
 ・RQST Wait
   相手タスクが既に起動中のとき相手の終了イベントを待ちます。
 ・Event Wait
   指定したタスクからのEVNTマクロを待ち合わせます。
 ・Time Wait
   指定時間のタイムアップイベントを待ち合わせます。

これらのタスク遷移はPICROSのサービスマクロ命令とスケジューラで
管理され実行されます。


【Stageの考え方】

各タスクはイベント駆動型になっていますが、同じタスクの中でも起動
されるイベントが異なる場合は、それぞれを独立のブロックに分割し
それぞれを「Stage」と呼びます。そして同じタスクIDでもStage番号が
異なると起動を独立に実行することが出来ます。
Stageは最大15まで組むことができます。

また、一度タスクに実行が移ると、それがEXITマクロで終了するか、
割込みが入るかしないとPICROSに戻って来ません。従って、実行時
間の長い大きなタスクとすると、タスクの実行が偏ってしまいますので、
大きなタスクは幾つかのブロックに分割し、それぞれを別の「Stage」と
して起動を別の形にします。

例で示すと下図のように、最初の起動は、Stage0として他のタスクから
起動されますが、その後は自分でONTMマクロ命令で繰り返しStage1
を起動するようにしています。
この例は一定間隔での周期起動をするタスクの例です。



  次のページへ     目次ページへ