xCoRoutineCreate
croutine. More...
croutine.
h
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.
- Parameters
-
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.
- Returns
- 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 int32_t 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(); crEND();}
// Function that creates two co-routines. void vOtherFunction( void ) { uint8_t 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 ); }}