os_task_delete

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

函数简介

os_task_delete 用于删除指定任务,并释放其占用的系统资源,是 HRTOS 任务生命周期管理中的核心接口。

该函数不仅会清除任务控制块信息,还会回收任务栈空间(基于位图管理), 并在必要时触发调度器执行任务切换,保证系统运行的连续性。

函数原型

char os_task_delete(unsigned char id);

参数说明

参数说明
id任务ID(普通任务或快速任务)

返回值

0 表示成功,-1 表示删除失败(任务不存在或参数错误)。

核心机制解析

1. 任务类型区分

系统根据任务ID判断当前任务属于“普通任务”还是“快速任务”, 分别采用不同的数据结构进行处理。

2. 任务合法性检查

if(OS_JINCHENG_JILU_SP[id] == 0) return -1;

若任务未创建或已删除,则直接返回失败,避免非法操作。

3. 栈空间回收机制(核心)

HRTOS 使用位图(bitmap)管理内存分配,删除任务时需要释放其栈空间:

for(; OS_HRTOS < m; OS_HRTOS++) { os_sp = OS_HRTOS >> 3; j = ~(0x80 >> (OS_HRTOS & 7)); OS_MEMORY[os_sp] &= j; }

该算法逐位清除占用标记,实现高效内存回收,避免内存碎片问题。

4. 控制块清理

删除任务后,会清空任务相关数据结构,包括:

5. 删除当前任务处理

if(id == OS_YUNXING_BIANHAO) { os_switch(); }

如果删除的是当前正在运行的任务,则立即触发调度器, 切换到下一个可运行任务。

使用示例

void main() { // 删除任务1 os_task_delete(1); while(1) { } }

典型使用场景

注意事项

删除任务后,其占用的资源将被释放,不可再次访问该任务ID。
删除当前任务会触发调度,应确保系统存在可运行任务。

相关推荐