セルタイプtSmapleMainの定義
セルタイプは、セルの持つ受け口、呼び口、属性、変数を定義します。以下は、sample1のsample_mainセルに対応するセルタイプの定義です。
[singleton]
celltype tSampleMain {
entry sMain eMain;
call sTask cTask[3];
call sSystem cSysMain;
call sCyc cCyc;
};
この定義は、シンプルなもので、属性、変数はありません。受け口はentryに続けてシグニチャ名と受け口名を書きます。この例ではeMainが受け口になります。呼び口はcallに続いてシグニチャ名と呼び口名を書きます。この例では3つの呼び口が記されています。cTaskは呼び口配列になります。
この例にありませんでしたが属性(attribute)と変数(var)の、ごく簡単な例を以下に示します。これらは、セルごとに記憶域が確保されます。
attribute {
int16 attr1;
};
var {
int32 var1;
};
attributeはセルの定義時に初期値を与えることができますが、varはセルタイプの定義時にのみ初期値を与えることができます。また、ポインタ変数が配列を指す場合には、指定子size_isにより配列の大きさを指定します。
この他に、attributeの属性宣言にはrw、omit指定子として指定できますが、ここでの説明は省略します。
セルの定義
シグニチャ、セルタイプと、お膳立てが済んだら組上げを記述できます。
セルの定義では、属性の初期値と呼び口の結合先を指定します。呼び口を、他のセルの受け口につないでいくことでシステムが組上がっていきます。
以下の例は、セルタイプcTask(コンポーネント化されたITRONのタスク)に属するmainセルを定義しています。
cell tTask main {
cMain = sample_main.eMain;
tskatr = C_EXP( "TA_ACT" );
itskpri = MAIN_PRIORITY;
};
cMainは呼び口で、sample_mainの受け口eMainに結合されます。
tskatrは属性で、ITRONのタスクを生成するための静的APIであるCRE_TSKのattr引数に与える値になります。
右辺にC_EXPとあるのは、初期値がC言語の式であることを表し、( )内の" "で囲まれた文字列がTECSのジェネレータによって評価されず、そのままC言語ソースに出力されることを意味します。import_Cではtypedefしか取込まれません。このため#defineで定義した定数値を参照するにはC_EXPを使って指定する必要があります。
ここでジェネレータが出てきましたが、これは前回冒頭で説明したTECSでのアプリケーション開発の流れにあるようにTECS CDLからインタフェースコードを始めとするC言語のプログラムを生成するもので、次回その働きを説明します。
itskpriも属性で、タスクのプライオリティを指定します。右辺は、先ほど定義した定数です。この右辺はジェネレータによって評価が行われます。
まとめ
今回は、sample1を元にコンポーネント記述言語TECS CDLについて一通り説明しました。前回のコンポーネント図と併せて、TECSによるコンポーネントの組上げができます。
次回は、セルタイプコードの書き方を説明します。
