firmware
IEM Firmware Documentation
Loading...
Searching...
No Matches
xCoRoutineCreate
Collaboration diagram for xCoRoutineCreate:

croutine. h

crCOROUTINE_CODE pxCoRoutineCode,
UBaseType_t uxPriority,
UBaseType_t uxIndex
);
void(* crCOROUTINE_CODE)(CoRoutineHandle_t xHandle, UBaseType_t uxIndex)
Definition croutine.h:50
BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex)
long BaseType_t
Definition portmacro.h:59
unsigned long UBaseType_t
Definition portmacro.h:60

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

Parameters
pxCoRoutineCodePointer to the co-routine function. Co-routine functions require special syntax - see the co-routine section of the WEB documentation for more information.
uxPriorityThe priority with respect to other co-routines at which the co-routine will run.
uxIndexUsed 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 );
}
}
#define crDELAY(xHandle, xTicksToDelay)
Definition croutine.h:310
#define crSTART(pxCRCB)
Definition croutine.h:214
void * CoRoutineHandle_t
Definition croutine.h:47
#define crEND()
Definition croutine.h:249
uint16_t TickType_t
Definition portmacro.h:63
struct tskTaskControlBlock * TaskHandle_t
Definition task.h:92