os_task_delete

所属模块:任务管理 | 类型:任务控制函数

API Metadata

函数ID:os_task_delete
模块:task
类型:task lifecycle control
嵌套深度:1

函数简介

os_task_delete 用于删除指定任务,并将其从调度器中移除。

该函数不会立即释放任务资源,而是通过标记删除请求,由系统在安全时机进行处理。

同时会解除该任务在调度器中的运行资格,确保不会再被调度执行。

函数原型

char os_task_delete(unsigned char id);

参数说明

参数 说明
id 任务ID(不能为0,必须小于任务总数)

返回值

1:删除请求成功
-1:参数非法

源码实现

/*------------------------------------------------------------------------ | FILE DESCRIPTION | ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | - File name : task_delete.c | - Author : 谭舒 | - Update date : 2026-09-19 | - Copyright(C) : 2026 HRTOS. All rights reserved. ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | INCLUDES | ------------------------------------------------------------------------*/ #include "hrtos_internal.h" #define OS_TASK_TOTAL (OS_PROCESS_MAX + OS_FAST_TASK_MAX) /*------------------------------------------------------------------------ | API FUNCTIONS | ------------------------------------------------------------------------*/ /** * @brief 请求删除指定任务。 * * @param[in] id 待删除的任务编号。 * * @return 操作结果。 * @retval 1 删除请求设置成功。 * @retval -1 任务编号无效。 * * @note 该函数仅设置任务删除请求,并将任务从调度器中移除。 * 普通任务同时被设置为删除态并清除等待时间。 * 任务实际运行资源的释放由系统后续的任务清理流程完成。 * 任务编号 0 不允许执行删除操作。 */ char os_task_delete(unsigned char id) // { //u8 obj; if(id == 0 || id >= OS_TASK_TOTAL) { return -1; } EA=0; /* 标记删除请求 */ 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; return 1; } /*------------------------------------------------------------------------ | END OF FILE: task_delete.c | ------------------------------------------------------------------------*/

使用示例

void demo() { os_task_delete(3); }

注意事项

任务删除采用“延迟标记机制”,不会立即释放资源,需等待系统清理流程完成。 删除高优先级任务时需谨慎,避免影响调度稳定性。

相关推荐