tcb.h

TCB関連の定義 MP化に伴いTCB関連の定義を task.h から分離 [詳細]

#include "queue.h"
#include "time_event.h"

tcb.hのインクルード依存関係図

ソースコードを見る。

データ構造

union  waiting_information
 待ち情報ブロック(WINFO)の定義 [詳細]
struct  task_initialization_block
 タスク初期化ブロック [詳細]
struct  task_control_block
 タスク管理ブロック(TCB) [詳細]

マクロ定義

#define INT_PRIORITY(x)   ((UINT)((x) - TMIN_TPRI))
#define EXT_TSKPRI(x)   ((PRI)(x) + TMIN_TPRI)
#define TS_DORMANT   0x00u
#define TS_RUNNABLE   0x01u
#define TS_WAITING   0x02u
#define TS_SUSPENDED   0x04u
#define TS_WAIT_SLEEP   0x08u
#define TS_WAIT_WOBJ   0x10u
#define TS_WAIT_WOBJCB   0x20u
#define TSTAT_DORMANT(tstat)   ((tstat) == TS_DORMANT)
#define TSTAT_RUNNABLE(tstat)   (((tstat) & TS_RUNNABLE) != 0)
#define TSTAT_WAITING(tstat)   (((tstat) & TS_WAITING) != 0)
#define TSTAT_SUSPENDED(tstat)   (((tstat) & TS_SUSPENDED) != 0)

型定義

typedef task_control_block TCB
typedef task_initialization_block TINIB
typedef waiting_information WINFO
 待ち情報ブロック(WINFO)の定義


説明

TCB関連の定義 MP化に伴いTCB関連の定義を task.h から分離

MP化による変更 TCBに以下のエントリを追加 clsid : クラスID pend_chgpri : 優先度変更保留(0リセット) pend_tertsk : タスクの強制終了保留 terflg : exit_and_dispatch要求

tcb.h で定義されています。


マクロ定義

#define EXT_TSKPRI  )     ((PRI)(x) + TMIN_TPRI)
 

tcb.h66 行で定義されています。

#define INT_PRIORITY  )     ((UINT)((x) - TMIN_TPRI))
 

tcb.h65 行で定義されています。

#define TS_DORMANT   0x00u
 

tcb.h76 行で定義されています。

#define TS_RUNNABLE   0x01u
 

tcb.h77 行で定義されています。

#define TS_SUSPENDED   0x04u
 

tcb.h79 行で定義されています。

#define TS_WAIT_SLEEP   0x08u
 

tcb.h81 行で定義されています。

#define TS_WAIT_WOBJ   0x10u
 

tcb.h82 行で定義されています。

#define TS_WAIT_WOBJCB   0x20u
 

tcb.h83 行で定義されています。

#define TS_WAITING   0x02u
 

tcb.h78 行で定義されています。

#define TSTAT_DORMANT tstat   )     ((tstat) == TS_DORMANT)
 

tcb.h93 行で定義されています。

#define TSTAT_RUNNABLE tstat   )     (((tstat) & TS_RUNNABLE) != 0)
 

tcb.h94 行で定義されています。

#define TSTAT_SUSPENDED tstat   )     (((tstat) & TS_SUSPENDED) != 0)
 

tcb.h96 行で定義されています。

#define TSTAT_WAITING tstat   )     (((tstat) & TS_WAITING) != 0)
 

tcb.h95 行で定義されています。


型定義

typedef struct task_control_block TCB
 

tcb.h56 行で定義されています。

typedef struct task_initialization_block TINIB
 

tcb.h57 行で定義されています。

typedef union waiting_information WINFO
 

待ち情報ブロック(WINFO)の定義

タスクが待ち状態の間は,TCB およびそこから指される WINFO を次のよ うに設定しなければならない.

(a) TCB のタスク状態を待ち状態にする.その際に,待ち状態に伴う付属 状態(TS_WAIT_????)も設定する.

(b) タイムアウトを監視するために,タイムイベントブロックを登録する. 登録するタイムイベントブロックは,待ちに入るサービスコール処理関数 のローカル変数として確保し,それへのポインタを WINFO の tmevtb に 記憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には, tmevtb を NULL にする.

同期・通信オブジェクトに対する待ち状態の場合には,標準の WINFO に wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.h で定義)を使 い,タスク状態に TS_WAIT_WOBJ を設定する.また,以下の (c)〜(e) の 設定を行う必要がある.同期・通信オブジェクトに関係しない待ち(起床 待ち,時間経過待ち)の場合には,(c)〜(e) は必要ない.

(c) TCB を待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待 ちキューにつなぐために,task_queue を使う.TCB を同期・通信オブジェ クトの管理ブロックの共通部分(WOBJCB)の待ちキューにつないだ場合に は,タスク状態に TS_WAIT_WOBJCB を設定する.

(d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを, WINFO_WOBJ の wobjcb に記憶する. FDMPカーネルで wobjcb を使うのは,優先度順の待ちキューにつながれて いるタスクの優先度が変更された場合のみであるが,デバッグ情報を取り 出しやすいように,待ちキューが優先度順でない場合にも wobjcb を設定 する.

(e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な 情報がある場合には,WINFO_WOBJ に必要な情報のためのフィールドを追加 した構造体を定義し,WINFO_WOBJ の代わりに用いる.

待ち状態を解除する際には,待ち解除したタスクからの返値を WINFO の wercd に設定する.wercd を使うのは待ち解除以降であるのに対して, tmevtb は待ち解除後は使わないため,メモリ節約のために共用体(union) を使っている.


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:19 2006 に Doxygen によって生成されました。