os_task_delete
所属模块:任务管理 | 类型:任务控制函数
函数简介
os_task_delete 用于删除指定任务,并将其从调度器中移除。
该函数不会立即释放任务资源,而是通过标记删除请求,由系统在安全时机进行处理。
同时会解除该任务在调度器中的运行资格,确保不会再被调度执行。
函数原型
char os_task_delete(unsigned char id);
参数说明
| 参数 |
说明 |
| id |
任务ID(不能为0,必须小于任务总数) |
源码实现
/*------------------------------------------------------------------------
| 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);
}
注意事项
任务删除采用“延迟标记机制”,不会立即释放资源,需等待系统清理流程完成。
删除高优先级任务时需谨慎,避免影响调度稳定性。