【TCTとは?】
TCTはTask Control Tableの略で、各タスクごとの現在状態と、マクロ
命令のパラメータを保存する場所です。各タスク毎に2バイトのデータ
メモリエリアを使用します。
【TCTの作り方】
TCT(Task Control Table)はPICROSの内部で使用する各タスクの
現在状態を格納しておくデータエリアです。
従って、ユーザ側で用意するのは、エリアのみ用意するだけです。
これを図で表すと下記の様になります。必要な条件は下記です。
(1)TCTを置く場所はデータメモリのBank0とする。
(2)TCTのためにユーザで確保しなければならないデータ
メモリサイズは
タスク数×2 バイトです。
![]()
データメモリエリアの開始番地
と終了番地はPICチップ種類に
より異なっている。
そのため開始番地をST_REGと
いう変数でアセンブル時に指定
する必要がある。
【TJTの構成】
TJT(Task Jump Table)は各タスクへのジャンプテーブルで、2段階の
ジャンプテーブルとなっています。
TJTはこの1段目のテーブルで、各タスクのStage0のジャンプ命令が
あるTJST内のアドレスを返すRETLIT命令の一覧表となっています。
原理を図で表すと下記のようになり、作成に必要な条件は下記です。
![]()
リンクを張る
(1)TJTの格納開始アドレスは0x100番地で固定です。
(2)タスク1からタスク数分だけ順に並んでいる必要があり
ます。
(3)各テーブル要素の中味はRETLW命令となっており、各タスク
のStage0のジャンプ命令のあるTJSTの位置を返す様にします。
このためのコーディングは下記の様にします。
ORG 0x100
DT task1,task2,task3
DT task4,----,taskm
(ここでtasknはTJSTのstage0のある場所のラベルです)
(またこれをアセンブルするとwarningが出ますが気に
しなくてそのままでOKです。)
【TJSTの作り方】
TJST(Task Jump SubTable)は、各タスクのStageごとへのジャンプ命令
(GOTO命令)を順に並べて格納しているテーブルです。
プログラムエリアのどこにでもジャンプ可能とするため、プログラム
カウンタの上位バイト(PCLATH)のBankビットをセットしています。
図で表すと下図となり、作成に必要な条件は下記です。
![]()
リンクを張る
(1)格納位置はTJT直後から0x1FF番地までの間とする。
(2)タスク1のstage0から順に必要なstage分全てが並んでいること
(3)各要素の中味は下記とする。
BCF PCLATH,3 (BCFかBSFかはタスク位置による)
BSF PCLATH,4 ( 〃 )
GOTO task1stage0 (タスク1のstage0の開始番地へ)
(ここでPCLATHのBankビットの指定は、タスクが存在する
エリアに合わせる必要がある)
(4)プログラムエリアが2Kワード以下のチップの場合には
全てBank0なので、この中味を簡単化し下記の様にすることが
出来るバージョンが用意されている。
GOTO task1stage0
これを表したのが下図である。
![]()