データ構造を下記に示す。
struct st_tcb {
struct st_tcb *link;
struct st_tcb *back_link;
void (*entry)( byte state );
uint16 time;
uint8 state;
uint8 next_state;
uint8 trg;
};
typedef struct st_tcb tcb_type;
起床されたタスクの実行待ちリスト。繋がれたTCBを順に実行する。
struct st_que {
struct st_tcb *link;
struct st_tcb *back_link;
};
typedef struct st_que que_type;
que_type ReadyQ;
タイムアウト待ちタスクのリスト。基準タイマ割込みで繋がれた最初のTCBのtimeを減算する。time=0ならばタイムアウト待ちキューからTCBを削除し、実行待ちキューにTCBを追加する。
struct st_que {
struct st_tcb *link;
struct st_tcb *back_link;
};
typedef struct st_que que_type;
que_type TimerQ;
イベント待ちタスクのリスト。イベント発生にて全てのイベント待ちTCBをイベント待ちリストから削除し、実行待ちキューに繋ぐ。
struct st_flag {
struct st_tcb *link;
struct st_tcb *back_link;
uint8 flag;
};
typedef struct st_flag flag_type;
セマフォsignal動作待ちタスクのリスト。セマフォにより排他制御を行う。size=1とすればバイナリセマフォとなる。
struct st_sem {
struct st_tcb *link;
struct st_tcb *back_link;
uint8 count;
uint8 size;
};
typedef struct st_sem sem_type;
メッセージ単位でタスク間の同期をとる。バッファはユーザ側で用意する。
struct st_mbx {
tcb_type *tcb;
uint8 *msg;
uint8 n;
uint8 n_max;
};
typedef struct st_mbx mbx_type;
2008/4/30 改訂2
2007/7/7 改訂1
2007/5/1 初版