0001: ///////////////////////////////////////////////////////////////////////////
0002: //      TASK SYSTEM FUNCTION
0003: //                                  Programmed by m.minami              
0004: ///////////////////////////////////////////////////////////////////////////
0005: 
0006: #ifndef __TASK_H_
0007: #define __TASK_H_
0008: 
0009: #define u_char      unsigned char
0010: #define TASK_MAX    256             // タスクの登録総数
0011: #define TASK_WSIZE  256             // ワークサイズ
0012: 
0013: // タスク実行プライオリティ
0014: enum {
0015:     PRIO_TOP,       // トップタスク
0016:     PRIO_00,
0017:     PRIO_01,
0018:     PRIO_02,
0019:     PRIO_03,
0020:     PRIO_04,
0021:     PRIO_05,
0022:     PRIO_06,
0023:     PRIO_07,
0024:     PRIO_08,
0025:     PRIO_09,        
0026:     SYSTEM_PRIO,    // システムプライオリティ(基本的に削除しない)
0027:     PRIO_BOTTOM     // テイルタスク
0028: };
0029: 
0030: // タスクコンディションデファイン
0031: enum {
0032:     TASK_SYS,                       // システムタスク(トップ、テイルタスク)
0033:     TASK_ON,                        // タスク実行中
0034:     TASK_OFF,                       // タスク登録待ち
0035:     TASK_KILL,                      // タスク削除待ち
0036:     TASK_SLEEP                      // スリープ中 ZZZ...
0037: };
0038: 
0039: 
0040: // タスクワーク定義
0041: typedef struct task_tag {
0042:     int         stat;               // タスク状態
0043:     int         type;               // タスクタイプ
0044:     int         prio;               // 実行プライオリティ
0045:     
0046:     task_tag    *pre;               // 前部リンク
0047:     task_tag    *next;              // 後部リンク
0048:     u_char      work[TASK_WSIZE];   // ユーザー用(256byte)
0049:     void        *proc;              // 実行関数へのポインタ
0050:     void        *end;               // デストラクタ
0051: } TASK;
0052: 
0053: // タスク初期化
0054: void TaskInit(void);
0055: 
0056: // タスク登録
0057: TASK *TaskCreate(void *proc, void *end, int prio);
0058: 
0059: // タスク削除
0060: void TaskKill(TASK *t);
0061: void TaskAllKill(void);
0062: void TaskPrioKill(int prio);
0063: 
0064: // タスク実行
0065: void TaskLoop(void);
0066: 
0067: // タスク数ゲット
0068: int TaskCntGet(void);
0069: 
0070: // トップタスクゲット
0071: TASK *TaskTopGet(void);
0072: 
0073: #endif
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送