Updated Jul 2025
FreeRTOS co-routines
Implementing a Co-Routine
A co-routine should have the following structure:
1void vACoRoutineFunction( CoRoutineHandle_t xHandle,2 UBaseType_t uxIndex )3{4 crSTART( xHandle );56 for( ;; )7 {8 -- Co-routine application code here. --9 }1011 crEND();12}
The type crCOROUTINE_CODE is defined as a function that returns void and takes an CoRoutineHandle_t and an index as its parameters. All functions that implement a co-routine should be of this type (demonstrated above).
Co-routines are created by calling xCoRoutineCreate().
Points to note:
-
All co-routine functions must start with a call to crSTART().
-
All co-routine functions must end with a call to crEND().
-
Co-routine functions should never return so are typically implemented as a continuous loop.
-
Many co-routines can be created from a single co-routine function. The uxIndex parameter is provided as a means of distinguishing between such co-routines.