os_task_function

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

函数简介

os_task_function 用于强制指定下一个执行的任务, 通过修改调度标志,使指定任务在下一次调度时优先运行。

该函数不会立即发生上下文切换,而是影响调度器的下一次决策, 本质上是一种“调度插队机制”。

函数原型

char os_task_function(unsigned char id);

参数说明

参数 说明
id 目标任务ID

返回值

0 表示成功,-1 表示失败(参数错误或当前不可插队)。

核心机制解析

1. 防重复调度保护

if(OS_JINCHENG_CUNCHU == 0) { OS_JINCHENG_CUNCHU = 1; }

系统通过 OS_JINCHENG_CUNCHU 标志防止重复插队, 保证调度过程的稳定性。

2. 保存当前任务

OS_QIAN_BIANHAO = OS_YUNXING_BIANHAO;

当前任务被记录为“上一个任务”, 用于后续调度恢复或状态判断。

3. 指定目标任务

OS_YUNXING_BIANHAO = id;

直接修改运行任务编号,使调度器在下一次执行时切换目标任务。

该方式相比传统优先级调度更加直接, 适用于需要强制控制执行顺序的场景。

使用示例

void main() { // 强制下一个执行任务为2号任务 os_task_function(2); while(1) { } }

典型使用场景

注意事项

本函数不会立即触发任务切换,仅在下一次调度时生效。
若目标任务不可运行,可能导致调度异常或无效切换。

相关推荐