os_task_exit

所属模块:任务管理 | 类型:任务终止函数

API Metadata

函数ID:os_task_exit
模块:task
类型:task terminate
嵌套深度:1

函数简介

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

注意事项

该函数会立即触发调度器切换,并将当前任务标记为删除状态。 调用后当前任务将不再继续执行后续代码。

相关推荐