第十六讲 任务优先级
本讲就是利用上一讲的位图功能,用优先级对任务进行管理
typedef struct _tTask { tTaskStack * stack; uint32_t delayTicks; uint32_t prio; //task结构体中增加优先级 }tTask; //首先需要在task创建中增加如下 { task->prio = prio; taskTable[prio] = task; //这个表格是一个task结构体指针数组,利用这个表格调用task tBitmapSet(&taskPrioBitmap, prio); //在相应的位图中置1 } //这个函数用来获取目前最高优先级的ready task tTask * tTaskHighestReady (void) { uint32_t highestPrio = tBitmapGetFirstSet(&taskPrioBitmap); return taskTable[highestPrio]; } //在任务调度器中调用tTaskHighestReady 函数,如果current task不是最高优先级 //就把next task置位最高优先级,然后切换 void tTaskSched () //在tTaskDelay中,需要把调用tBitmapClear(&taskPrioBitmap, currentTask->prio); //因为此时这个task已经不是ready 状态了,这个时候已经有了一些任务状态的概念了。 tTaskDelay() //这个函数中,原本是用来扫描每个任务的delayTicks值,如果为0,那么就要调用 //tBitmapSet,将相应位置1,重新ready了。 void tTaskSystemTickHandler ()