wake_task
所属模块:内核调度 | 类型:任务唤醒函数
函数简介
wake_task 用于唤醒处于等待状态的任务,
将任务从 WAIT 状态恢复为 READY 状态,并重新参与系统调度。
该函数同时负责清理任务的等待上下文信息,
并解除资源对象中的等待标记。
函数原型
void wake_task(u8 tid, u8 flag);
参数说明
| 参数 |
说明 |
| tid |
任务ID |
| flag |
唤醒原因标志(WAIT_SIGNAL / WAIT_TIMEOUT等) |
源码实现
#include "hrtos_internal.h"
/* =========================================================
* 任务唤醒核心
*/
void wake_task(u8 tid, u8 flag)
{
u8 obj;
obj = OS_TASK[tid].wait_obj;
/* -------------------------
* 清理资源等待位图
* ------------------------- */
if(obj != OS_INVALID_ID)
{
OS_RES[obj].wait_mask &= ~((u16)1 << tid);
if(OS_RES[obj].wait_cnt)
{
OS_RES[obj].wait_cnt--;
}
}
/* -------------------------
* 设置唤醒结果
* ------------------------- */
OS_TASK[tid].wait_flag = flag;
/* -------------------------
* 清理等待上下文
* ------------------------- */
OS_TASK[tid].wait_type = WAIT_NONE;
OS_TASK[tid].wait_obj = OS_INVALID_ID;
OS_TASK[tid].wait_tick = 0;
/* -------------------------
* 恢复就绪状态
* ------------------------- */
OS_TASK[tid].state = READY;
/* -------------------------
* 加入调度系统
* ------------------------- */
OS_PROCESS_OK[tid] |= 1;
OS_SCHED_REASON = 1;
TF0 = 1;
}
使用示例
wake_task(1, WAIT_SIGNAL);
注意事项
wake_task 是系统级核心函数,仅用于内核内部调用。
直接错误使用可能破坏任务状态一致性。