Quality RTOS & Embedded Software

December 2021 Releases:
Extended Maintenance Plan (EMP):
FreeRTOS 202111.00 Release:
FreeRTOS LTS libraries:
Symmetric Multi-Processing:

[Co-Routine Specific]

BaseType_t xCoRoutineCreate ( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex );

Create a new co-routine and add it to the list of co-routines that are ready to run.

pxCoRoutineCode Pointer to the co-routine function. Co-routine functions require special syntax - see the co-routine section of the web documentation for more information.
uxPriority The priority with respect to other co-routines at which the co-routine will run..
uxIndex Used to distinguish between different co-routines that execute the same function. See the example below and the co-routine section of the web documentation for further information.
pdPASS if the co-routine was successfully created and added to a ready list, otherwise an error code defined with ProjDefs.h.

Example usage:

 // Co-routine to be created.
 void vFlashCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )
 // Variables in co-routines must be declared static if they must 
 // maintain value across a blocking call. This may not be necessary 
 // for const variables.
 static const char cLedToFlash[ 2 ] = { 5, 6 };
 static const TickType_t uxFlashRates[ 2 ] = { 200, 400 };

     // Must start every co-routine with a call to crSTART();
     crSTART( xHandle );

     for( ;; )
         // This co-routine just delays for a fixed period, then toggles
         // an LED.  Two co-routines are created using this function, so
         // the uxIndex parameter is used to tell the co-routine which
         // LED to flash and how long to delay.  This assumes xQueue has
         // already been created.
         vParTestToggleLED( cLedToFlash[ uxIndex ] );
         crDELAY( xHandle, uxFlashRates[ uxIndex ] );

     // Must end every co-routine with a call to crEND();

 // Function that creates two co-routines.
 void vOtherFunction( void )
 unsigned char ucParameterToPass;
 TaskHandle_t xHandle;
     // Create two co-routines at priority 0.  The first is given index 0
     // so (from the code above) toggles LED 5 every 200 ticks.  The second
     // is given index 1 so toggles LED 6 every 400 ticks.
     for( uxIndex = 0; uxIndex < 2; uxIndex++ )
         xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );


Type by which co-routines are referenced. The co-routine handle is automatically passed into each co-routine function.

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.