cre_mpl

acre_mpl

概要

可変長メモリ・プールの生成

C言語形式

 ER      cre_mpl ( ID mplid, T_CMPL *pk_cmpl );
 ER_ID   acre_mpl ( T_CMPL *pk_cmpl );
パラメータ

I/O

パラメータ

説明

I

 ID      mplid;
可変長メモリ・プールのID

I

 T_CMPL  *pk_cmpl;
可変長メモリ・プール生成情報を格納した領域へのポインタ



【 可変長メモリ・プール生成情報T_CMPLの構造 】

 typedef struct  t_cmpl {
         ATR     mplatr;         /*可変長メモリ・プール属性*/
         SIZE    mplsz;          /*可変長メモリ・プール領域のサイズ(バイト数)*/
         VP      mpl;            /*可変長メモリ・プール領域の先頭アドレス*/
         UINT    maxblksz;       /*最大メモリ・ブロック・サイズ(バイト数)*/
 } T_CMPL;


機能

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

cre_mplは,指定されたmplidの可変長メモリ・プールをpk_cmplで指定された内容で生成します。acre_mplはpk_cmplで指定された内容で可変長メモリ・プールを生成し,生成した可変長メモリ・プールIDを返します。

1 ) 可変長メモリ・プール属性(mplatr
mplatrにはTA_TFIFOのみを指定できます。


- TA_TFIFO(= 0x0000)
可変長メモリ・プールの待ちキューの順序をFIFO順とします。


2 ) 可変長メモリ・プール領域のサイズmplsz),可変長メモリ・プール領域の先頭アドレス(mpl
アプリケーション側で,mplszバイトの可変長メモリ・プール領域を確保し,その先頭アドレスをmplに指定します。
mplは4バイト境界でなければなりません。



備考1 RI600PXは,可変長メモリ・プール領域に関するアクセス権については何も関知しません。タスクが可変長メモリ・プールから獲得したメモリ・ブロックにアクセスするには,可変長メモリ・プール領域は適切にアクセス許可が設定されたメモリ・オブジェクト内に確保する必要があります。
また,RI600PXは可変長メモリ・プール領域内に管理テーブルを生成します。この管理テーブルがアプリケーションによって書き換えられた場合,システムの正常な動作は保証されません。


備考2 μITRON4.0仕様には,mplにNULLを指定することでRI600PXが可変長メモリ・プール領域を割り当てる機能がありますが,本サービス・コールはこの機能をサポートしていません。

備考3 獲得するメモリ・ブロックのアライメント数は,4です。

3 ) 最大メモリ・ブロック・サイズ(maxblksz
maxblkszにはメモリ・ブロックの最大サイズを指定します。実際に獲得可能メモリ・ブロックの最大サイズは,maxblkszより大きくなることがあります。詳細は,「9.3.1 可変長メモリ・ブロックのサイズ」を参照してください。


戻り値

マクロ

数値

意味



正の値

acre_mplの正常終了(生成された可変長メモリ・プールID)

E_OK

0

cre_mplの正常終了

E_RSATR

-11

予約属性

- mplatr != TA_TFIFO

E_PAR

-17

パラメータ・エラー

- pk_cmpl == NULL

- mplsz < 24,mplsz > VTMAX_AREASIZE

- maxblksz == 0,maxblksz > 0x0BFFFFF4

- maxblkszに対してmplszが小さすぎる。

- mpl + mplsz > 0x100000000

- mplが4バイト境界でない

E_ID

-18

不正ID番号(cre_mplのみ)

- mplid≦0

- mplid > VTMAX_MPL

E_CTX

-25

コンテキスト・エラー

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

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

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

E_MACV

-26

メモリ・アクセス違反

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

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

E_OACV

-27

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

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

E_NOMEM

-33

メモリ不足

- mpl == NULL

E_NOID

-34

空きIDなし(acre_mplのみ)

E_OBJ

-41

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

- mplidの可変長メモリ・プールが存在する。