os_task_suspend_self
所属模块:任务管理 | 类型:任务主动挂起函数
函数简介
os_task_suspend_self 用于当前正在运行的任务主动挂起自身。
挂起后任务将从调度队列中移除,并触发系统重新调度。
该接口常用于任务主动让出CPU资源,实现协作式调度或节拍控制。
函数原型
void os_task_suspend_self(void);
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : task_suspend_self.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include "hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 挂起当前任务,并请求系统进行任务调度。
*
* @param[in] None
*
* @return None。
*
* @note 将当前任务从就绪状态中移除,使其暂停参与系统调度。
* 对于高速任务,清除对应的高速任务运行标志。
* 函数执行完成后请求系统重新进行任务调度。
*/
void os_task_suspend_self()//主动挂起自己,让出CPU触发调度
{
u8 id;
id=OS_CURRENT_TASK;
if(id>=OS_PROCESS_MAX)
{
id%=OS_PROCESS_MAX;
if(id==1)
{
OS_KUAI_PROCESS_B=0;
}
else
{
OS_KUAI_PROCESS_A=0;
}
}
else
{
OS_PROCESS_OK[id]&=0xfe;
}
OS_SCHED_REASON=1;//调度触发位
TF0=1;//T0中断
}
/*------------------------------------------------------------------------
| END OF FILE: task_suspend_self.c |
------------------------------------------------------------------------*/
使用示例
void task_demo()
{
while(1)
{
// 执行一轮任务后主动让出CPU
os_task_suspend_self();
}
}
注意事项
该函数会立即触发调度,当前任务将不再继续执行当前时间片。
若任务未被其他机制重新激活,将持续处于挂起状态。