リアルタイムふうOS>データ構造

<前      目次      次>

RTF-OS (RealTimeFoo OperatingSystem)


データ構造を下記に示す。

1.タスクコントロールブロック:TCB

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;

2.実行待ち行列:ReadyQ

起床されたタスクの実行待ちリスト。繋がれたTCBを順に実行する。

struct st_que {
    struct st_tcb  *link;
    struct st_tcb  *back_link;
};

typedef struct st_que  que_type;

que_type  ReadyQ;

3.タイムアウト待ちキュー:TimerQ

タイムアウト待ちタスクのリスト。基準タイマ割込みで繋がれた最初の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;

4.イベントフラグ:FLAG

イベント待ちタスクのリスト。イベント発生にて全てのイベント待ちTCBをイベント待ちリストから削除し、実行待ちキューに繋ぐ。

struct st_flag {
    struct st_tcb  *link;
    struct st_tcb  *back_link;
    uint8          flag;
};

typedef struct st_flag  flag_type;

5.セマフォ:SEM

セマフォ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;

6.メールボックス:MBX

メッセージ単位でタスク間の同期をとる。バッファはユーザ側で用意する。

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 初版