void OSTaskSuspend (OS_TCB *p_tcb,
OS_ERR *p_err)
File |
Called from |
Code enabled by |
---|---|---|
|
Task only |
|
OSTaskSuspend()
suspends (or blocks) execution of a task unconditionally. The calling task may be suspended by specifying a NULL
pointer for p_tcb
, or simply by passing the address of its OS_TCB
. In this case, another task needs to resume the suspended task. If the current task is suspended, rescheduling occurs, and µC/OS-III runs the next highest priority task ready-to-run. The only way to resume a suspended task is to call OSTaskResume()
.
Task suspension is additive, which means that if the task being suspended is delayed until N ticks expire, the task is resumed only when both the time expires and the suspension is removed. Also, if the suspended task is waiting for a semaphore and the semaphore is signaled, the task is removed from the semaphore wait list (if it is the highest-priority task waiting for the semaphore), but execution is not resumed until the suspension is removed.
The user can “nest” suspension of a task by calling OSTaskSuspend()
and therefore it is important to call OSTaskResume()
an equivalent number of times to resume the task. If suspending a task five times, it is necessary to unsuspend the same task five times to remove the suspension of the task.
Arguments
p_tcb
is a pointer to the TCB of the task the user is suspending. A NULL
pointer indicates suspension of the calling task.
p_err
is a pointer to a variable that will contain an error code returned by this function.
OS_ERR_NONE
If the call was successful and the desired task was suspended.
OS_ERR_TASK_SUSPEND_ISR
If OS_CFG_CALLED_FROM_ISR_CHK_EN
set to 1
in os_cfg.h
: if the function is called from an ISR.
OS_ERR_TASK_SUSPEND_IDLE
If attempting to suspend the idle task. This is not allowed since the idle task must always exist.
OS_ERR_TASK_SUSPEND_INT_HANDLER
If attempting to suspend the ISR handler task. This is not allowed since the ISR handler task is a µC/OS-III internal task.
Returned Value
None
Notes/Warnings
OSTaskSuspend()
and OSTaskResume()
must be used in pairs.OSTaskResume()
.