第十六讲 任务优先级

本文介绍了一种基于优先级的任务管理方法,通过在任务结构中引入优先级字段,并使用位图来跟踪各优先级的任务状态,实现了高效的任务调度。文中详细讲解了任务创建、延迟、系统滴答处理等关键函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

 

转载于:https://www.cnblogs.com/nasduc/p/8505086.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值