os_task_exit
所属模块:任务管理 | 类型:任务终止函数
函数简介
os_task_exit 用于立即退出当前正在运行的任务。
任务会被标记为删除状态,并从调度器中移除运行资格,同时触发一次系统调度。
该接口属于强制任务终止机制,用于任务主动结束自身执行流程。
函数原型
void os_task_exit(void);
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : task_exit.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include "hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 立即退出当前任务。
*
* @param[in] None
*
* @return None。
*
* @note 将当前任务标记为删除状态并从调度器中移除。
* 同时设置任务删除请求,并触发系统调度,使系统切换到其他可运行任务。
* 当前任务的运行资源由后续任务清理流程统一释放。
*/
void os_task_exit()//立即退出当前任务
{
u8 id;
EA=0;
id = OS_CURRENT_TASK;
/* 标记删除请求 */
OS_TASK_EVENT[id] |= OS_EVENT_DELETE_REQ;
/* 从调度器移除 */
if(id >= OS_PROCESS_MAX)
{
if(id == OS_PROCESS_MAX)
{
OS_KUAI_PROCESS_A = 0;
OS_WAIT_DI2[0] = 0;
}
else if(id == OS_PROCESS_MAX + 1)
{
OS_KUAI_PROCESS_B = 0;
OS_WAIT_DI2[1] = 0;
}
}
else
{
OS_PROCESS_OK[id] &= 0xfe;
OS_TASK[id].state = DEAD;//删除态避免被激活
OS_TASK[id].wait_tick = 0;
}
EA=1;
OS_SCHED_REASON=1;//调度触发位
TF0=1;//T0中断
}
/*------------------------------------------------------------------------
| END OF FILE: task_exit.c |
------------------------------------------------------------------------*/
使用示例
void task_demo()
{
// 任务完成后主动退出
os_task_exit();
}
注意事项
该函数会立即触发调度器切换,并将当前任务标记为删除状态。
调用后当前任务将不再继续执行后续代码。