task. h
void rtos_suspend_all( void );
Suspends the scheduler without disabling interrupts. Context switches will not occur while the scheduler is suspended.
After calling rtos_suspend_all () the calling task will continue to execute without risk of being swapped out until a call to rtos_resume_all () has been made.
API functions that have the potential to cause a context switch (for example, task_delay_until(), xQueueSend(), etc.) must not be called while the scheduler is suspended.
Example usage:
void vTask1( void * pvParameters )
{
for( ;; )
{
// Task code goes here.
// ...
// At some point the task wants to perform a long operation during
// which it does not want to get swapped out. It cannot use
// taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
// operation may cause interrupts to be missed - including the
// ticks.
// Prevent the real time kernel swapping out the task.
rtos_suspend_all ();
// Perform the operation here. There is no need to use critical
// sections as we have all the microcontroller processing time.
// During this time interrupts will still operate and the kernel
// tick count will be maintained.
// ...
// The operation is complete. Restart the kernel.
rtos_resume_all ();
}
}