GadgetSeed  0.9.6
tcb.h
[詳解]
1 /** @file
2  @brief タスクコンテキストブロック
3 
4  @date 2011.10.19
5  @author Takashi SHUDO
6 */
7 
8 #ifndef TCB_H
9 #define TCB_H
10 
11 #include "sysconfig.h"
12 #include "queue.h"
13 #include "asm.h"
14 
15 #define TASK_NAME_LEN 15 ///< 最大タスク名長
16 
17 #define PSTAT_READY 0 ///< タスク 実行可能状態
18 #define PSTAT_RUN 1 ///< タスク 実行状態
19 #define PSTAT_TIMER_WAIT 2 ///< タスク タイマ待ち状態
20 #define PSTAT_EVENT_WAIT 3 ///< タスク イベント待ち状態
21 #define PSTAT_MUTEX_WAIT 4 ///< タスク MUTEXロック解除待ち状態
22 #define PSTAT_REQUEST_WAIT 5 ///< タスク 起床待ち状態
23 #define PSTAT_DORMANT 6 ///< タスク 休止状態
24 
25 typedef int (* task_func)(char *arg); ///< タスク関数
26 
27 struct tcb_queue {
28  struct st_queue queue; ///< キュー
29  struct st_tcb *tcb; ///< タスクコンテキストブロックポインタ
30 }; ///< タスクキュー
31 
32 struct st_tcb {
33  struct tcb_queue queue; ///< タスクキュー(st_tcb をst_queueにキャストするために必ず最初に定義する)
34 
35  struct tcb_queue timer_list; ///< タイムアウト待ちキュー
36  struct tcb_queue task_list; ///< 全タスクキュー
37 
38  int id; ///< タスクID
39  char name[TASK_NAME_LEN + 1]; ///< タスク名
40  void *sp; ///< スタックポインタ
41  void *stack_addr; ///< スタック先頭アドレス
42  unsigned int stack_size; ///< スタックサイズ
43  struct st_context ctx; ///< CPUコンテキスト(CPUアーキテクチャ依存)
44 
45  task_func main_func; ///< タスク関数
46  char *arg; ///< タスク実行時引数文字列
47 
48  int priority; ///< タスクプライオリティ
49  unsigned int wup_time; ///< スリープタイムアウト時間
50  int status; ///< タスク状態(PSTAT_*)
51 
52  struct st_device *stdin_dev; ///< タスク標準入力デバイス
53  struct st_device *stdout_dev; ///< タスク標準出力デバイス
54  struct st_device *error_dev; ///< タスクエラー出力デバイス
55 
56  unsigned int meas_time; ///< タスク実行時間計測開始システム時間(msec)
57  unsigned int run_time; ///< タスク実行時間(msec)
58 
59  struct {
60  int type; ///< システムコールタイプ
61  void *param; ///< システムコール実行パラメータ
62  } syscall;
63 }; ///< タスクコンテキスト
64 
65 #endif // TCB_H
char * arg
タスク実行時引数文字列
Definition: tcb.h:46
int type
システムコールタイプ
Definition: tcb.h:60
task_func main_func
タスク関数
Definition: tcb.h:45
int status
タスク状態(PSTAT_*)
Definition: tcb.h:50
unsigned int run_time
タスク実行時間(msec)
Definition: tcb.h:57
タスクキュー
Definition: tcb.h:27
struct st_queue queue
キュー
Definition: tcb.h:28
#define TASK_NAME_LEN
最大タスク名長
Definition: tcb.h:15
int priority
タスクプライオリティ
Definition: tcb.h:48
struct st_tcb * tcb
タスクコンテキストブロックポインタ
Definition: tcb.h:29
struct st_device * stdin_dev
タスク標準入力デバイス
Definition: tcb.h:52
struct st_device * stdout_dev
タスク標準出力デバイス
Definition: tcb.h:53
キュー構造
Definition: queue.h:13
タスクキュー操作
unsigned int meas_time
タスク実行時間計測開始システム時間(msec)
Definition: tcb.h:56
int(* task_func)(char *arg)
タスク関数
Definition: tcb.h:25
Cortex-M4
void * sp
スタックポインタ
Definition: tcb.h:40
void * param
システムコール実行パラメータ
Definition: tcb.h:61
unsigned int wup_time
スリープタイムアウト時間
Definition: tcb.h:49
unsigned int stack_size
スタックサイズ
Definition: tcb.h:42
struct st_device * error_dev
タスクエラー出力デバイス
Definition: tcb.h:54
デバイスドライバ構造体
Definition: device.h:25
int id
タスクID
Definition: tcb.h:38
タスクコンテキスト
Definition: tcb.h:32
void * stack_addr
スタック先頭アドレス
Definition: tcb.h:41
Cortex-M3 用タスクコンテキスト
Definition: asm-Cortex-M3.h:49