cre_mbf

acre_mbf

概要

メッセージ・バッファの生成

C言語形式

 ER      cre_mbf ( ID mbfid, T_CMBF *pk_cmbf );
 ER_ID   acre_mbf ( T_CMBF *pk_cmbf );
パラメータ

I/O

パラメータ

説明

I

 ID      mbfid;
メッセージ・バッファのID

I

 T_CMBF  *pk_cmbf;
メッセージ・バッファ生成情報を格納した領域へのポインタ



【 メッセージ・バッファ生成情報T_CMBFの構造 】

 typedef struct  t_cmbf {
         ATR     mbfatr;         /*メッセージ・バッファ属性*/
         UINT    maxmsz;         /*メッセージの最大サイズ(バイト数)*/
         SIZE    mbfsz;          /*メッセージ・バッファ領域のサイズ(バイト数)*/
         VP      mbf;            /*メッセージ・バッファ領域の先頭アドレス*/
 } T_CMBF;


機能

本サービス・コールは,信頼されたドメインに所属するタスクからのみ呼び出せます。

cre_mbfは,指定されたmbfidのメッセージ・バッファをpk_cmbfで指定された内容で生成します。acre_mbfはpk_cmbfで指定された内容でメッセージ・バッファを生成し,生成したメッセージ・バッファIDを返します。

1 ) メッセージ・バッファ属性(mbfatr
mbfatrにはTA_TFIFOのみを指定できます。


- TA_TFIFO(= 0x0000)
メッセージ・バッファの送信待ちキューの順序をFIFO順とします。


備考 メッセージ・バッファの受信待ちキューはFIFO順です。

2 ) メッセージの最大サイズ(maxmsz
このメッセージ・バッファに送信するメッセージの最大サイズを指定します。rcv_mbfprcv_mbf,およびtrcv_mbfで指定するメッセージ受信領域は,このサイズ以上でなければなりません。


3 ) メッセージ・バッファ領域のサイズ(mbfsz),メッセージ・バッファ領域の先頭アドレス(mbf
アプリケーション側で,mbfszバイトのメッセージ・バッファ領域を確保し,その先頭アドレスをmbfに指定します。
また,mbfszに0を指定することもできます。この場合,メッセージ・バッファにメッセージを蓄えておくことはできないため,送信側と受信側の先に実行した方が待ち状態になり,他方が行われた時点で待ちが解除される,つまり送信側と受信側が完全に同期した動作となります。なお,mbfszが0の場合は,mbfは無視されます。



備考1 RI600PXは,メッセージ・バッファ領域に関するアクセス権については何も関知しません。通常は,メッセージ・バッファ領域はメモリ・オブジェクト以外でかつユーザ・スタック以外の領域に作成してください。メモリ・オブジェクト内にメッセージ・バッファ領域を作成した場合は,そのメモリ・オブジェクトへのオペランド・ライト・アクセスが許可されたタスクが,誤ってメッセージ・バッファ領域を書き換えてしまう危険があります。

備考2 μITRON4.0仕様には,mbfにNULLを指定することでRI600PXがメッセージ・バッファ領域を割り当てる機能がありますが,本サービス・コールはこの機能をサポートしていません。

戻り値

マクロ

数値

意味



正の値

acre_mbfの正常終了(生成されたメッセージ・バッファID)

E_OK

0

cre_mbfの正常終了

E_RSATR

-11

予約属性

- mbfatr != TA_TFIFO

E_PAR

-17

パラメータ・エラー

- pk_cmbf == NULL

- maxmsz == 0,maxmsz > 65528

- 0 < mbfsz < 8,mbfsz > 65532

- mbfsz== 0かつmbf + mbfsz > 0x100000000

- mbfsz== 0かつmbfsz < maxmsz + VTSZ_MBFTBL

E_ID

-18

不正ID番号(cre_mbfのみ)

- mbfid≦0

- mbfid > VTMAX_MBF

E_CTX

-25

コンテキスト・エラー

- CPUロック状態から本サービス・コールを発行した。

- 非タスクから本サービス・コールを発行した。

- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。

E_MACV

-26

メモリ・アクセス違反

- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。

- 呼び出しタスクからのpk_cmbfが示す領域に対するオペランド・リード・アクセス許可がない。

E_OACV

-27

オブジェクト・アクセス違反

- 呼出しタスクは,信頼されたドメインに所属していない。

E_NOMEM

-33

メモリ不足

- mbfsz != 0かつmbf == NULL

E_NOID

-34

空きIDなし(acre_mbfのみ)

E_OBJ

-41

オブジェクト状態不正(cre_mbfのみ)

- mbfidのメッセージ・バッファが存在する。