Everything

cre_mpf

acre_mpf

概要
固定長メモリ・プールの生成
C言語形式
 ER      cre_mpf ( ID mpfid, T_CMPF *pk_cmpf );
 ER_ID   acre_mpf ( T_CMPF *pk_cmpf );
パラメータ
I/O
パラメータ
説明
I
 ID      mpfid;
固定長メモリ・プールのID
I
 T_CMPF  *pk_cmpf;
固定長メモリ・プール生成情報を格納した領域へのポインタ

【 固定長メモリ・プール生成情報T_CMPFの構造 】
 typedef struct  t_cmpf {
         ATR     mpfatr;         /*固定長メモリ・プール属性*/
         UINT    blkcnt;         /*獲得可能なメモリ・ブロック数*/
         UINT    blksz;          /*メモリ・ブロックのサイズ(バイト数)*/
         VP      mpf;            /*固定長メモリ・プール領域の先頭アドレス*/
         VP      mpfmb;          /*固定長メモリ・プール管理領域の先頭アドレス*/
 } T_CMPF;

機能
本サービス・コールは,信頼されたドメインに所属するタスクからのみ呼び出せます。
cre_mpfは,指定されたmpfidの固定長メモリ・プールをpk_cmpfで指定された内容で生成します。acre_mpfはpk_cmpfで指定された内容で固定長メモリ・プールを生成し,生成した固定長メモリ・プールIDを返します。
1 ) 固定長メモリ・プール属性(mpfatr
mpfatrには以下を指定できます。
   mpfatr := ( TA_TFIFO || TA_TPRI )
- TA_TFIFO(= 0x0000)
固定長メモリ・プールの待ちキューの順序をFIFO順とします。
- TA_TPRI(= 0x0001)
固定長メモリ・プールの待ちキューの順序をタスクの現在優先度順とします。ただし,同じ現在優先度のタスクの中ではFIFO順です。
2 ) 獲得可能なメモリ・ブロック数(blkcnt),メモリ・ブロックのサイズ(blksz),固定長メモリ・プール領域の先頭アドレス(mpf
アプリケーション側で,TSZ_MPF(blkcnt, blksz)バイトの固定長メモリ・プール領域を確保し,その先頭アドレスをmpfに指定します。
備考1 TSZ_MPFマクロについては,「18.3.3 固定長メモリ・プール関連」を参照してください。
備考2 RI600PXは,固定長メモリ・プール領域に関するアクセス権については何も関知しません。タスクが固定長メモリ・プールから獲得したメモリ・ブロックにアクセスするには,固定長メモリ・プール領域は適切にアクセス許可が設定されたメモリ・オブジェクト内に確保する必要があります。
また,RI600PXは固定長メモリ・プール領域内に管理テーブルを生成します。この管理テーブルがアプリケーションによって書き換えられた場合,システムの正常な動作は保証されません。
備考3 μITRON4.0仕様には,mpfにNULLを指定することでRI600PXが固定長メモリ・プール領域を割り当てる機能がありますが,本サービス・コールはこの機能をサポートしていません。
備考4 メモリ・ブロックのアライメント数は1です。これより大きいアライメント数のメモリ・ブロックを獲得したい場合は,以下を守ってください。
- 固定長メモリ・プール生成時に指定するメモリ・ブロック・サイズを,目的のアライメン数の倍数とする。
- 固定長メモリ・プール領域の先頭アドレスを,目的のアライメント数のアドレスとする。
3 ) 固定長メモリ・プール管理領域の先頭アドレス(mpfmb
アプリケーション側で,TSZ_MPFMB(blkcnt, blksz)バイトの固定長メモリ・プール管理領域を確保し,その先頭アドレスをmpfmbに指定します。
備考1 TSZ_MPFMBマクロについては,「18.3.3 固定長メモリ・プール関連」を参照してください。
備考2 RI600PXは,固定長メモリ・プール管理領域に関するアクセス権については何も関知しません。通常は,固定長メモリ・プール管理領域はメモリ・オブジェクト以外でかつユーザ・スタック以外の領域に作成してください。メモリ・オブジェクト内に固定長メモリ・プール管理領域を作成した場合は,そのメモリ・オブジェクトへのオペランド・ライト・アクセスが許可されたタスクが,誤って固定長メモリ・プール管理領域を書き換えてしまう危険があります。
戻り値
マクロ
数値
意味

正の値
acre_mpfの正常終了(生成された固定長メモリ・プールID)
E_OK
0
cre_mpfの正常終了
E_RSATR
-11
予約属性
- mpfatrのbit0以外のビットが1
E_PAR
-17
パラメータ・エラー
- pk_cmpf == NULL
- blkcnt == 0,blkcnt > 65535
- blksz == 0,blksz > 65535
- TSZ_MPF(blkcnt, blksz) > VTMAX_AREASIZE
- mpf + TSZ_MPF(blkcnt, blksz) > 0x100000000
E_ID
-18
不正ID番号(cre_mpfのみ)
- mpfid≦0
- mpfid > VTMAX_MPF
E_CTX
-25
コンテキスト・エラー
- CPUロック状態から本サービス・コールを発行した。
- 非タスクから本サービス・コールを発行した。
- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。
E_MACV
-26
メモリ・アクセス違反
- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。
- 呼び出しタスクからのpk_cmpfが示す領域に対するオペランド・リード・アクセス許可がない。
E_OACV
-27
オブジェクト・アクセス違反
- 呼出しタスクは,信頼されたドメインに所属していない。
E_NOMEM
-33
メモリ不足
- mpf == NULL
- mpfmb == NULL
E_NOID
-34
空きIDなし(acre_mpfのみ)
E_OBJ
-41
オブジェクト状態不正(cre_mpfのみ)
- mpfidの固定長メモリ・プールが存在する。