cre_tsk

acre_tsk

概要

タスクの生成

C言語形式

 ER      cre_tsk ( ID tskid, T_CTSK *pk_ctsk );
 ER_ID   acre_tsk ( T_CTSK *pk_ctsk );
パラメータ

I/O

パラメータ

説明

I

 ID      tskid;
タスクのID

I

 T_CTSK  *pk_ctsk;
タスク生成情報を格納した領域へのポインタ



【 タスク生成情報T_CTSKの構造 】

 typedef struct  t_ctsk {
         ATR     tskatr;         /*タスク属性*/
         VP_INT  exinf;          /*拡張情報*/
         FP      task;           /*タスクの実行開始アドレス*/
         PRI     itskpri;        /*タスク起動時優先度*/
         SIZE    stksz;          /*ユーザ・スタック・サイズ(バイト数)*/
         VP      stk;            /*ユーザ・スタック領域の先頭アドレス*/
 } T_CTSK;


機能

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

cre_tskは,tskidで指定されたタスクをpk_ctskで指定された内容で生成します。acre_tskはpk_ctskで指定された内容でタスクを生成し,生成したタスクIDを返します。

タスク生成時に行われる処理を,表19−2に示します。

表19−2  タスク生成時に行われる処理

No.

処理内容

1

タスク起動要求キューイング数をクリアする。

2

タスク例外処理ルーチンを定義されていない状態にする。



1 ) タスク属性(tskatr
tskatrには以下を指定できます。


   tskatr := ( TA_HLNG  | [TA_ACT] | [TA_DOM(domid)] )
以下に,tskatrのビット位置を示します。

bit15〜bit8

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

0

ドメインID

(TA_DOM(domid))

0

0

TA_ACT :1

TA_HLNG : 0



- TA_HLNG(= 0x0000)
タスクの記述言語は,C言語のみをサポートしています。


- TA_ACT(= 0x0002)
TA_ACTを指定すると,生成されたタスクは起動され,READY状態になります。タスク起動時に行われる処理は,表19−3の通りです。TA_ACTを指定しない場合は,生成されたタスクはDORMANT状態になります。


- TA_DOM(domid)
domidには,所属するドメインIDを指定します。domidTDOM_SELFを指定した場合,およびTA_DOM(domid)の指定を省略した場合は,本サービス・コールを呼び出したタスクと同じドメインとします。


備考 TA_DOMマクロについては,「18.3.4 ドメイン関連」を参照してください。

2 ) 拡張情報(exinf
TA_ACT属性,またはact_tsk, iact_tskによってタスクが起動された場合,exinfがタスクに引数として渡されます。また,exinfはタスク例外処理ルーチンにも引数として渡されます。exinf は,ユーザが生成するタスクに関する情報を設定するなどの目的で自由に使用できます。


3 ) タスクの実行開始アドレス(task
taskには,タスクの実行開始アドレスを指定します。


4 ) タスク起動時優先度(itskpri
itskpriには,タスク起動時の優先度を指定します。指定可能な範囲は,1〜TMAX_TPRIです。


5 ) ユーザ・スタック・サイズ(stksz),ユーザ・スタック領域の先頭アドレス(stk
アプリケーション側でユーザ・スタック領域を確保し,その先頭アドレスをstkに,サイズをstkszに指定します。
ユーザ・スタック領域は,以下を満たす必要があります。



A ) stkは16バイト境界であること。そうでない場合はE_PARエラーを返します。

B ) stkszは16の整数倍であること。そうでない場合はE_PARエラーを返します。

C ) ユーザ・スタック領域は,他のユーザ・スタックおよびメモリ・オブジェクトと重なっていないこと。そうでない場合,エラーは検出されず,システムの正常な動作は保証されません。

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

戻り値

マクロ

数値

意味



正の値

acre_tskの正常終了(生成されたタスクID)

E_OK

0

cre_tskの正常終了

E_RSATR

-11

予約属性

- tskatrのbit0,bit2,bit3,bit8〜bit15のいずれかが1

- VTMAX_DOMAIN < (tskatrのbit4〜bit7の値)

E_PAR

-17

パラメータ・エラー

- pk_ctsk == NULL

- task == NULL

- itskpri < 0

- TMAX_TPRI < itskpri

- stkが16バイト境界でない。

- stkszが16の倍数でない。

- stksz < 表20−8に示す下限値

- VTMAX_AREASIZE < stksz

- stk + stksz > 0x100000000

E_ID

-18

不正ID番号(cre_tskのみ)

- tskid≦0

- tskid > VTMAX_TSK

E_CTX

-25

コンテキスト・エラー

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

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

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

E_MACV

-26

メモリ・アクセス違反

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

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

E_OACV

-27

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

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

E_NOMEM

-33

メモリ不足

- stk == NULL

E_NOID

-34

空きIDなし(acre_tskのみ)

E_OBJ

-41

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

- tskidのタスクが存在する。