os_task_hang

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

函数简介

os_task_hang 用于将指定任务从调度系统中移除,使其不再参与调度执行。

该函数不会删除任务,也不会释放资源,而是通过修改任务状态, 取消其“就绪资格”,从而实现任务的临时挂起。

函数原型

char os_task_hang(unsigned char id);

参数说明

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

返回值

0 表示成功,-1 表示失败(参数错误)。

核心机制解析

1. 参数合法性判断

if(id > OS_JINCHENG_MAX+1) return -1;

防止非法任务ID访问系统数据结构。

2. 快速任务处理

if(id >= OS_JINCHENG_MAX) { id %= OS_JINCHENG_MAX; if(id == 1) OS_KUAI_PEOCESS_B = 0; else OS_KUAI_PEOCESS_A = 0; }

快速任务通过独立标志位控制, 挂起时直接关闭其调度标记。

3. 普通任务处理

OS_PEOCESS_OK[id] &= 0xFE;

清除任务的“就绪位”(最低位), 使调度器在扫描时跳过该任务。

该方式开销极低,是典型的位标志调度设计。

使用示例

void main() { // 挂起任务1 os_task_hang(1); while(1) { } }

典型使用场景

注意事项

挂起任务不会释放资源,如需彻底删除应使用 os_task_delete。
被挂起的任务需要通过 os_task_ready 才能重新参与调度。

相关推荐