任务的具体实现

任务的数据结构是一切的基础。

任务管理器

调度器可调度的任务都需要先使用任务管理器向内核注册。注册后的任务,任务管理器自身会维护一个链表,该链表保存着全部任务。

任务注册

任务注册时,用户需要使用结构 ‘Task_InitConfig_t’ 提供任务的基础信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct {
/* 不允许为空 */
Task_Handle_t entryPoint; // 任务的入口点
Kernal_TaskType_e type; // 任务类型,即前文中的四种,用户只关心重要和次要任务即可
uint8_t priority; // 任务的优先级,被次要任务使用
uint32_t* stackAddr; // 堆栈起始地址(最大栈顶) 栈底需要 8 byte 对齐
uint32_t stackSize; // 单位: byte 推荐 4 的倍数

/* 可选 */
void* argv; // 在入口点传入的参数
const char* name; // 任务名
uint32_t timeout; // 超时时间
} Task_InitConfig_t;