目次

システムコール

 システムコールは、OSのもつ機能を呼び出し、使うための関数です。

 μITRONに準拠したシステムコールを用意しました。

 以下のシステムコールを持ちます。

 システムコールを利用すると、個々のタスクは、下図のように状態遷移します。



 タスクは、RUN、READY、SUSPEND、WAITの4状態をもちます。

 READY→RUNは、USOのタスクディスパッチャが担当します。

 RUN→SUSPENDは、システムコールslp_tskを利用します。

 RUN→WAITは、システムコールwai_tskを利用します。

 READY→SUSPENDは、システムコールsus_tskを利用します。

 SUSPEND→READYは、システムコールrsm_tskを利用します。

 WAIT→READYは、USOのスケジューラが担当します。

 RTOSを理解して使いこなすには、タスクの状態をどうしたいかを
 考えればよいことになります。タスクの状態を考えにくい場合は
 タスクを職人として、どう働かせたいかを考えます。

 タスクが職人であれば、専門の仕事があります。
 仕事のやり方を考えるのが、タスク内部の処理に相当します。

 各システムコールについて説明します。


cre_tsk

 タスクをシステムに登録します。  タスク動作を関数としてシステムに登録します。  実際には、次のように使います。 cre_tsk(TSK_ID0,tsk0_proc); cre_tsk(TSK_ID1,tsk1_proc);  このとき、タスクの状態は不定です。

sta_tsk

 タスクを指定の状態で起動します。  タスクの担当処理により、起動時にはSUSPENDであった方がよい  こともあるので、READY、SUSPEND、WAITのいずれかの状態を指定  できるようにしました。  実際には、次のように使います。 sta_tsk(TSK_ID0,TTS_READY) ; sta_tsk(TSK_ID1,TTS_SUSPEND); sta_tsk(TSK_ID2,TTS_WAIT);

sus_tsk

 IDを指定して、タスクをSUSPEND状態にします。  タスク間に主従関係があるときは、主タスクが従タスクの状態を  操作したい場面に出くわします。  その場合に、タスクIDを指定して、従タスクをSUSPENDに  遷移させます。  実際には、次のように使います。 sus_tsk( TSK_ID3 ) ;

rsm_tsk

 IDを指定して、タスクをREADY状態にします。  タスク間に主従関係があると、主タスクが従タスクの状態を  操作したい場面に出くわします。  その場合に、タスクのIDを指定して、従タスクをREADYに  遷移させます。  実際には、次のように使います。 rsm_tsk( TSK_ID2 ) ;

slp_tsk

 自タスクを、SUSPEND状態にします  1回だけ、そのタスクを実行したいような場合、主タスクが  該当タスクを起動後、主タスクは手を加えない使い方を実現  したいときに利用します。  実際には、そのタスクでの作業をすべて終了したならば、次の  ようにシステムコールを発行します。 slp_tsk() ;

wai_tsk

 指定時間、自タスクをWAIT状態にします。  該当タスクが、周期的に処理を実行したい場合に利用します。  時間は、10msのN倍(Nは、1〜65535)で  10msから65535ms(=655.35秒)までタスクをWAIT  にできます。  1分ごとに温度を取得し、シリアル回線に流す場合などに  このシステムコールを利用できます。  実際のタスクで、定義してみると、以下となります。 unsigned char counter ; void tsk2_proc(void) { /* increment */ counter++ ; /* turn on or off LED */ LED_BIT = counter & 1 ; /* wait 1 second */ wai_tsk( 100 ) ; }

目次

inserted by FC2 system