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]
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