Windows版iTRONサービスコールの作成 (メールボックス)
(その1)
組み込みソフトウェアで利用されているOS「iTRON」のサービスコールをWindows上で動作させるためのライブラリです。
タスク間通信機能の『メールボックス』の実装を説明します。
メールボックスとは、メモリ上に確保されたメッセージ・パケットを受け渡すことによりタスク間の通信を行います。
メールボックスではメッセージ・パケットのヘッダ領域にあるポインタ領域に次のメッセージ・パケットをリンクしていくことでメッセージのキューイングを行いますので、メッセージを送信するときに確保したメッセージ・パケットのメモリはメッセージキューから取り出されるまで有効な領域でなければなりません。
・Ver3.0のメールボックス機能で提供されるサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
cre_mbx | メールボックスを生成します。 |
del_mbx | メールボックスを削除します。 |
snd_msg | メールボックスにメッセージを送信します。 |
rcv_msg / prcv_msg / trcv_msg | メールボックスからメッセージを取り出します。 |
ref_mbx | メールボックスの状態を参照します。 |
・Ver4.0のメールボックス機能で提供されるサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
cre_mbx / acre_mbx | メールボックスを生成します。 |
del_mbx | メールボックスを削除します。 |
snd_msg | メールボックスにメッセージを送信します。 |
rcv_msg / prcv_msg / trcv_msg | メールボックスからメッセージを取り出します。 |
ref_mbx | メールボックスの状態を参照します。 |
メールボックスへ送受信するメッセージ・パケットは実装依存となっているので、本ライブラリではメッセージ・パケットをリンクする領域のみ定義し、メッセージ本体のデータ部分はユーザー側で定義するようにします。
メッセージ・パケット構造体は以下のとおりです。
メンバ名 | 説明 |
---|---|
nextmsg | 次のメッセージ・パケット構造体のポインタ。 |
msgpri | メッセージの優先度。 |
ユーザー側のプログラムに合うように、ヘッダファイルの T_MSG 構造体の定義を直接変更されてもよいですし、以下に示すソースコードのようにメッセージ・パケットを含む構造体を新たに定義しても構いません。
typedef struct {
T_MSG msgHdr;
int msgSize;
BYTE msgBuf[16];
} T_MSGEX;
T_MSGEX msg;
:
:
ercd = snd_msg( msgId, (T_MSG *)(&msg) );