第十六讲 任务优先级

 本讲就是利用上一讲的位图功能,用优先级对任务进行管理

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 ()

 

posted on 2018-03-04 16:37  nasduc  阅读(561)  评论(0编辑  收藏  举报

导航