ZestCode
 
Loading...
Searching...
No Matches
rtos_suspend_all

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