-
cre_tsk
acre_tsk
-
ER cre_tsk ( ID tskid, T_CTSK *pk_ctsk );
ER_ID acre_tsk ( T_CTSK *pk_ctsk );
|
|
|
|
ID tskid;
|
|
|
T_CTSK *pk_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に示します。
|
|
|
|
|
タスク例外処理ルーチンを定義されていない状態にする。
|
1 ) タスク属性(
tskatr)
tskatrには以下を指定できます。
tskatr := ( TA_HLNG | [TA_ACT] | [TA_DOM(domid)] )
-
TA_HLNG(= 0x0000)
タスクの記述言語は,C言語のみをサポートしています。
-
TA_ACT(= 0x0002)
TA_ACTを指定すると,生成されたタスクは起動され,READY状態になります。タスク起動時に行われる処理は,
表19−3の通りです。TA_ACTを指定しない場合は,生成されたタスクはDORMANT状態になります。
- TA_DOM(
domid)
domidには,所属するドメインIDを指定します。
domidに
TDOM_SELFを指定した場合,およびTA_DOM(
domid)の指定を省略した場合は,本サービス・コールを呼び出したタスクと同じドメインとします。
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)
|
|
|
|
|
|
- tskatrのbit0,bit2,bit3,bit8〜bit15のいずれかが1
|
|
|
- stk + stksz > 0x100000000
|
|
|
|
|
|
- CPUロック状態から本サービス・コールを発行した。
- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。
|
|
|
- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。
- 呼び出しタスクからの pk_ctskが示す領域に対するオペランド・リード・アクセス許可がない。
|
|
|
- 呼出しタスクは,信頼されたドメインに所属していない。
|
|
|
|
|
|
|
|
|
|