wake_task

所属模块:内核调度 | 类型:任务唤醒函数

API Metadata

函数ID:wake_task
模块:kernel scheduler
类型:task wake / state transition
嵌套深度:1

函数简介

wake_task 用于唤醒处于等待状态的任务, 将任务从 WAIT 状态恢复为 READY 状态,并重新参与系统调度。

该函数同时负责清理任务的等待上下文信息, 并解除资源对象中的等待标记。

函数原型

void wake_task(u8 tid, u8 flag);

参数说明

参数 说明
tid 任务ID
flag 唤醒原因标志(WAIT_SIGNAL / WAIT_TIMEOUT等)

返回值

无返回值(void函数)

源码实现

/*------------------------------------------------------------------------ | FILE DESCRIPTION | ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | - File name : wake_task.c | - Author : 谭舒 | - Update date : 2026-09-19 | - Copyright(C) : 2026 HRTOS. All rights reserved. ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | INCLUDES | ------------------------------------------------------------------------*/ #include "hrtos_internal.h" /*------------------------------------------------------------------------ | API FUNCTIONS | ------------------------------------------------------------------------*/ /** * @brief 唤醒指定任务并恢复其调度资格。 * * @param[in] tid 待唤醒的任务编号。 * @param[in] flag 任务唤醒原因标志。 * * @return None。 * * @note 清理指定任务的等待状态及等待对象, * 设置任务唤醒结果并恢复任务就绪状态。 * 当任务已删除或处于删除准备状态时,不执行唤醒操作。 * 任务唤醒后请求系统重新进行任务调度。 */ void wake_task(u8 tid, u8 flag) { u8 obj; /* 保存等待对象 */ EA=0; 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--; } } if(OS_PROCESS_OK[tid] == 0)//已删除 { EA=1; return ; } if(OS_TASK_EVENT[tid] & OS_EVENT_DELETE_REQ)//准备删除 { EA=1; return ; } /* ------------------------- * 设置唤醒结果 * ------------------------- */ 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;//调度触发位 EA=1; TF0=1;//T0中断 } /*------------------------------------------------------------------------ | END OF FILE: wake_task.c | ------------------------------------------------------------------------*/

使用示例

wake_task(1, WAIT_SIGNAL);

注意事项

wake_task 是系统级核心函数,仅用于内核内部调用。 直接错误使用可能破坏任务状态一致性。

相关推荐