任务挂起函数OSTaskSuspend()
无条件挂起一个任务,它必须和任务恢复函数OSTaskResume()
成对出现。任务一旦被挂起,被挂起的任务就只能通过其它任务调用OSTaskResume()
函数来恢复。
任务挂起函数
OSTaskSuspend()
源码如下,主要流程:- 判断要挂起的任务是否为当前运行的任务。
- 取消要挂起任务的就绪状态并在任务控制块中记录,
ptcb->OSTCBStat |=OS_STAT_SUSPEND;
。 - 如果要挂起的任务是当前运行的任务则执行一次任务调度。
INT8U OSTaskSuspend (INT8U prio)
{
BOOLEAN self;
OS_TCB *ptcb;
INT8U y;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
#if OS_ARG_CHK_EN > 0
if (prio == OS_TASK_IDLE_PRIO) { /* Not allowed to suspend idle task */
return (OS_ERR_TASK_SUSPEND_IDLE);
}
if (prio >= OS_LOWEST_PRIO) { /* Task priority valid ? */
if (prio != OS_PRIO_SELF) {
return (OS_ERR_PRIO_INVALID);
}
}
#endif
OS_ENTER_CRIT