cre_dtq

acre_dtq

概要

データ・キューの生成

C言語形式

 ER      cre_dtq ( ID dtqid, T_CDTQ *pk_cdtq );
 ER_ID   acre_dtq ( T_CDTQ *pk_cdtq );
パラメータ

I/O

パラメータ

説明

I

 ID      dtqid;
データ・キューのID

I

 T_CDTQ  *pk_cdtq;
データ・キュー生成情報を格納した領域へのポインタ



【 データ・キュー生成情報T_CDTQの構造 】

 typedef struct  t_cdtq {
         ATR     dtqatr;         /*データ・キュー属性*/
         UINT    dtqcnt;         /*データ・キュー領域の容量(データの個数)*/
         VP      dtq;            /*データ・キュー領域の先頭アドレス*/
 } T_CDTQ;


機能

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

cre_dtqは,指定されたdtqidのデータ・キューをpk_cdtqで指定された内容で生成します。acre_dtqはpk_cdtqで指定された内容でデータ・キューを生成し,生成したデータ・キューIDを返します。

1 ) データ・キュー属性(dtqatr
dtqatrには以下を指定できます。


   dtqatr := ( TA_TFIFO || TA_TPRI )
- TA_TFIFO(= 0x0000)
データ・キューの送信待ちキューの順序をFIFO順とします。


- TA_TPRI(= 0x0001)
データ・キューの送信待ちキューの順序をタスクの現在優先度順とします。ただし,同じ現在優先度のタスクの中ではFIFO順です。


備考 データ・キューの受信待ちキューはFIFO順です。

2 ) データ・キュー領域の容量(dtqcnt),データ・キュー領域の先頭アドレス(dtq
アプリケーション側で,TSZ_DTQ(dtqcnt)バイトのデータ・キュー領域を確保し,その先頭アドレスをdtqに指定します。
また,dtqcntに0を指定することもできます。この場合,データ・キューにデータを蓄えておくことはできないため,送信側と受信側の先に実行した方が待ち状態になり,他方が行われた時点で待ちが解除される,つまり送信側と受信側が完全に同期した動作となります。なお,dtqcntが0の場合は,dtqは無視されます。



備考1 TSZ_DTQマクロについては,「18.3.2 データ・キュー関連」を参照してください。

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

備考3 μITRON4.0仕様には,dtqにNULLを指定することでRI600PXがデータ・キュー領域を割り当てる機能がありますが,本サービス・コールはこの機能をサポートしていません。

戻り値

マクロ

数値

意味



正の値

acre_dtqの正常終了(生成されたデータ・キューID)

E_OK

0

cre_dtqの正常終了

E_RSATR

-11

予約属性

- dtqatrのbit0以外のビットが1

E_PAR

-17

パラメータ・エラー

- pk_cdtq == NULL

- dtqcnt > 65535

- dtqcnt != 0かつdtq + TSZ_DTQ(dtqcnt) > 0x100000000

E_ID

-18

不正ID番号(cre_dtqのみ)

- dtqid≦0

- dtqid > VTMAX_DTQ

E_CTX

-25

コンテキスト・エラー

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

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

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

E_MACV

-26

メモリ・アクセス違反

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

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

E_OACV

-27

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

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

E_NOMEM

-33

メモリ不足

- dtqcnt != 0かつdtq == NULL

E_NOID

-34

空きIDなし(acre_dtqのみ)

E_OBJ

-41

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

- dtqidのデータ・キューが存在する。