os_task_suspend_self

所属模块:任务管理 | 类型:任务主动挂起函数

API Metadata

函数ID:os_task_suspend_self
模块:task
类型:self suspend / yield block
嵌套深度:1

函数简介

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(); } }

注意事项

该函数会立即触发调度,当前任务将不再继续执行当前时间片。 若任务未被其他机制重新激活,将持续处于挂起状态。

相关推荐