os_task_set_next
所属模块:调度器 | 类型:强制调度控制函数
函数简介
os_task_set_next 用于强制指定下一次运行的任务,并立即触发系统调度。
该接口会打断当前调度流程,直接修改当前任务与下一个任务的执行关系。
由于会绕过正常调度策略,该接口仅建议用于调试或特殊控制场景。
函数原型
char os_task_set_next(unsigned char id);
参数说明
| 参数 |
说明 |
| id |
目标任务ID(0~OS_PROCESS_MAX+1) |
返回值
1:切换成功
-1:参数非法或任务不可运行
源码实现
char os_task_set_next(unsigned char id)
{
if(id > OS_PROCESS_MAX + 1)
{
return -1;
}
if(id < OS_PROCESS_MAX)
{
if((OS_PROCESS_OK[id] && 0x01) == 0)
{
return -1;
}
}
if(id == OS_PROCESS_MAX)
{
if(!OS_KUAI_PROCESS_A)
{
return -1;
}
}
if(id == OS_PROCESS_MAX + 1)
{
if(!OS_KUAI_PROCESS_B)
{
return -1;
}
}
if(id == OS_CURRENT_TASK)
{
OS_TIME_XY = 0;
return 1;
}
if(OS_JINCHENG_CUNCHU == 0)
{
OS_JINCHENG_CUNCHU = 1;
OS_PREV_TASK = OS_CURRENT_TASK;
OS_CURRENT_TASK = id;
OS_SCHED_REASON = 1;
TF0 = 1;
return 1;
}
return -1;
}
使用示例
void debug_switch()
{
os_task_set_next(2);
}
注意事项
该接口会绕过正常调度逻辑,仅允许执行一次切换控制。
多次调用可能导致调度状态不一致。