RT-LINUXのシステム・コール |
---|
(ご注意) この章はRT-Linuxからかき集めて日本語訳しただけであり、 内容について検討したわけではありません。 また断じてCopyrightを主張するものでもありません。 著作権はRT-Linuxの作者にあります。 RT-LINUXのシステム・コールには次のようなものがあります。 |
タスク制御関係 |
rt_task_init() |
リアルタイムプロセス間通信・リアルタイムFIFOの関係 |
rtf_ipc_create デバッガでは未インプリメント |
メッセージ・キュー関係 |
セマフォー関係 |
rtl_sem_destroy |
タスク関係拡張 |
rtl_task_ipc_delete |
▲ | |
![]() real-time taskの生成。 ![]()
#define MODULE ![]()
rtl_task_initはreal-time taskの生成を行う。アプリケーションタスクはReal Time Linux task が規定するstructureで提供される構造体をrt_task_init に渡さなければならない。この構造体はタスク生存中は存在し続けなければならない、従ってオート変数であってはならない。 ![]()
成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。 ![]()
-EINVAL ![]() ![]() ![]() |
|
▲ | |
![]() タスク周期起動 ![]() int rt_task_make_periodic(RT_TASK *task, RTIME start_time, RTIME period); ![]() このタスクに周期起動を設定する。直ちにタスクを起動したければ、rt_get_time()の戻り値をstart_timeにセットする。
|
|
▲ | |
![]() タスクの一時停止。 ![]() extern int rt_task_suspend(RT_TASK *task); ![]() taskで指定するreal-time taskを一時中止状態に設定する。 ![]() ![]() ![]() ![]() |
|
▲ | |
![]() タスクの削除 ![]() extern int rt_task_delete(RT_TASK *task); ![]() rtl_task_deleteはrtl_task_initで生成したタスクをタスクリストから削除する。 ![]() ![]() ![]() ![]() |
|
▲ | |
![]() 実行放棄。 ![]() extern int rt_task_wait(void) ![]() タスク周期起動において、次の周期まで実行を一時中止する。 ![]() ![]() ![]() ![]() |
|
▲ | |
![]() リアルタイムfifoの作成。 ![]() #include <linux/rtf.h> xtern int rtf_create(unsigned int fifo, int size); ![]() RT-FIFOの作成を行う。RT-FIFO番号fifoを初期サイズsizeで生成する。 ![]() 成功の場合sizeを返す。失敗の場合-1を返す。 ![]() ![]() ![]() |
|
▲ | |
![]() RT-FIFOのサイズを変更する。 ![]() #include <linux/rtf.h> ![]() RT-FIFOのサイズを変更する。 ![]() 成功の場合sizeが返される。失敗の場合、負値が返る。 ![]() FIFOに残っている内容は破棄される。 ![]() ![]() |
|
▲ | |
![]() ![]() #include <linux/rtf.h> ![]() RT-FIFOのhandlerをアタッチする。関数handlerはLinuxプロセスがFIFOへread
あるいはwritesしたとき呼ばれる。Handlerは呼ばれたとき、fifoあ引数として渡される。 ![]() ![]() ![]() ![]() |
|
▲ | |
![]() RT-FIFOからの読み出し。 ![]() #include <linux/rtf.h> ![]() RT-FIFOからcountバイトの読み込みを試行する。 ![]() 成功した場合、countを返す。FIFOに充分なデータが無いばあい-1を返す。 ![]() ![]() ![]() |
|
▲ | |
![]() RT-FIFOへの書き込み。 ![]() #include <linux/rtf.h> ![]() RT-FIFO番号fifoへの書き込みを試行する。 ![]() 成功した場合countを返す、FIFOに充分なスペースがない場合-1を返す。 ![]() ![]() ![]() |
|
▲ | |
![]() リアルタイムFIFOの削除 ![]() #include <linux/rtf.h> ![]() RT-FIFOの削除を行う。 ![]() 成功の場合0を返す。 ![]() ![]() ![]() |
|
▲ | |
![]() メッセージキューの生成 ![]() #define MODULE ![]() rtl_mq_initはreal-time message queueを生成し初期化する。
メッセージ・キューはリアルタイム・タスク相互間の通信に使用することができる。LinuxとReal-Time
Linux間の通信はReal-Time Linuxの標準RT-FIFOで容易に実現できる。 ![]() 成功した場合は0を返す。 失敗の場合は下記の負値であるエラー値を返す。 ![]() -EINVAL ![]() 優先度の継承は現在できない。 ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]()
rtl_mq_destroy(2), rtl_mq_receive(2), rtl_mq_send(2), |
|
▲ | |
![]() メッセージキューの送信動作 ![]()
#define MODULE ![]() rtl_mq_sendはデータmsgをメッセージキューmqへ格納する。データは(別に定義してあるとしても)rtl_mq_initで設定したサイズであると仮定し処理する。
優先度prioがRT_MQ_NORMALの場合、このデータは待ち行列の最後に置かれる。もしprioがRT_MQ_URGENTであると、このデータは強制的に待ち行列の先頭に位置する。オプションのtimeoutはRT_WAIT_FOREVERの場合、この関数はタイムアウトしない。RT_NO_WAITでありセマフォー未使用の場合rtl_mq_sendは直ちにリターンする。その他の数値を設定した場合、rtl_mq_sendはこの時間内に処理が終わらなければタイムアウトする。この際rtl_mq_sendは戻り値として-ETIMEを返す。 ![]() 成功のとき0を返す。 失敗の場合負の値である、下記のエラーコードを返す。 ![]() -ETIME タイムアウト ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_receive(2), |
|
▲ | |
![]() メッセージキューの受信動作 ![]() #define MODULE ![]() rtl_mq_receiveはメッセージキューmqからキューを取り出しデータmsgへ格納する。
このデータのサイズはrtl_mq_initで設定した大きさである。オプションであるタイムアウトを設定した場合次の動作を行う。RT_WAIT_FOREVERはタイムアウトを起こさない、RT_NO_WAIT
を指定しセマフォーが使用可能でないときrtl_mq_receiveは直ちにリターンする。その他の値を設定した場合、この時間内に処理が終わらなければrtl_mq_receiveはタイムアウトする。この際rtl_mq_receiveは戻り値として-ETIMEを返す。 ![]() 成功のとき0を返す。 失敗の場合、負の値である下記のエラーコードを返す。 ![]() -ETIME タイムアウト時間を過ぎた. ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_send(2), |
|
▲ | |
![]() メッセージキューの削除 ![]()
#define MODULE ![]() rtl_mq_destroyはrtl_mq_createで生成したメッセージキューmqを削除する。
メッセージキュー削除に際しての安全策は施してある。例えば、メッセージキューによってブロックされているタスクは実行状態にしてからメッセージキューを削除する。 ![]() 成功の場合0を返す。失敗の場合負の値の下記エラー値を返す。 ![]() -EINVAL ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_mq_init(2), rtl_mq_receive(2), rtl_mq_send(2), |
|
▲ | |
![]() セマフォーの初期化 ![]() #define MODULE ![]() rtl_sem_initはリアルタイムセマフォーの初期化を実行する。
セマフォーはリアルタイム・タスク間の通信及び同期機構を提供する。Linux プロセスとリアルタイム・タスク間の通信は標準RTLinuxのRT-FIFOが取り扱う。リアルタイム・セマフォーsemは静的構造体変数でなければならない。TypeはRT_SEM_BINARYあるいは
RT_SEM_COUNTINGである。 init_valはセマフォーの初期値(通常0)である。 ![]() 成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。 ![]() -EINVAL ![]() Priorityは整合性を保つためにあり現状ではサポートしていない。 ![]() Jerry Epplin <JerryEpplin@worldnet.att.net>> ![]() rtl_task_ipc_delete(2), rtl_task_ipc_init(2), |
|
▲ | |
![]() セマフォー 'post' 操作 ![]() #define MODULE ![]() rtl_sem_postはセマフォーのポスト操作(しばしば、この操作はセマフォーの
'give', 'signal', あるいは 'V'と呼ばれる)を行う。このセマフォーを待つタスクがあれば、そのうち最も優先度の高いタスクが実行可能状態となる。セマフォーsemはrtl_sem_createで生成した構造体を指す。 ![]() 成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。 ![]() -EINVAL ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_task_ipc_delete(2), rtl_task_ipc_init(2), |
|
▲ | |
![]() セマフォー 'wait' 操作 ![]() #define MODULE ![]() rtl_sem_waitはセマフォーの wait 操作(しばしばセマフォーの'take' あるいは
'P'と呼ばれる)を行う。 rtl_sem_trywaitと異なり、セマフォーが使用可能ではない場合コールしたタスクはブロック状態へ移行し、セマフォー待ちとなる。セマフォーsemはrtl_sem_createで生成した構造体を指す。オプションであるタイムアウトを設定した場合次の動作を行う。RT_WAIT_FOREVERはタイムアウトを起こさない、RT_NO_WAITを指定しセマフォーが使用可能でないときrtl_mq_receiveは直ちにリターンする。その他の値を設定した場合、この時間内に処理が終わらなければrtl_mq_receiveはタイムアウトする。この際rtl_mq_receiveは戻り値として-ETIMEを返す。 ![]() 成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。 ![]() -EAGAIN ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_task_ipc_delete(2), rtl_task_ipc_init(2), |
|
▲ | |
![]() セマフォーの'wait' (ブロックしない) 操作 ![]() #define MODULE ![]() rtl_sem_waitはセマフォーのwait操作(しばしば、この操作はセマフォーの'take'あるいは
'P'と呼ばれる) を行う。rtl_sem_waitと異なり、rtl_sem_trywaitは直ちにリターンする。セマフォーsemはrtl_sem_createで生成した構造体を指す。 ![]() 成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。 ![]() -EAGAIN ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_task_ipc_delete(2), rtl_task_ipc_init(2), |
|
▲ | |
![]() セマフォーの削除 ![]() #define MODULE ![]() rtl_sem_destroyはrtl_sem_createで生成したセマフォーの削除を行う。セマフォーsemは
rtl_sem_createで生成した構造体を指す。セマフォー削除の際の安全策は施してある。例えばセマフォー待ちでブロックしているタスクは実行可能状態とする。 ![]() 成功の場合0を返す。失敗の場合負の値である下記のエラー値を返す。 ![]() -EINVAL ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_task_ipc_delete(2), rtl_task_ipc_init(2), |
|
▲ | |
![]() real-time taskの生成。 ![]() #define MODULE ![]() rtl_task_initはreal-time taskの生成を行う。アプリケーションタスクはReal
Time Linux task が規定するstructureで提供される構造体をrt_task_init に渡さなければならない。この構造体はタスク生存中は存在し続けなければならない、従ってオート変数であってはならない。rt_task_init
はRT_TASK 構造体を通して新タスクのエントリー・ポイントfnを渡す。親タスクは一つのinteger変数を引数として新タスクへ渡すことができる。stack_sizeは新タスクで使用するスタック・スペースを、priorityはタスクの優先度を設定する。Priority1は最優先度のタスクをRT_LOWEST_PRIORITYは最低優先度のタスクを示す。新しく生成したタスクはdormant(休眠)状態に初期化される。通常、rt_task_wakeupあるいはrt_task_make_periodic
で実行状態へ移行する。 ![]() 成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。 ![]() -EINVAL ![]() ![]() ![]() |
|
▲ | |
![]() rtl_task_ipc_initで生成されたタスクを削除する。 ![]() #define MODULE ![]() tl_task_ipc_deleteはrtl_task_ipc_initで生成したタスクを削除する。 ![]() 成功の場合0 を返す。失敗の場合、下記に示す負のエラー値を返す。 ![]() -EINVAL ![]() Jerry Epplin <JerryEpplin@worldnet.att.net> ![]() rtl_mq_destroy(2), rtl_mq_init(2), rtl_mq_receive(2), |
|
|
|
![]() |
|
---|---|
Guest No. |