|
uc-sdk
|
croutine. h
portBASE_TYPE xCoRoutineCreate(
crCOROUTINE_CODE pxCoRoutineCode,
unsigned portBASE_TYPE uxPriority,
unsigned portBASE_TYPE 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. |
Example usage:
Co-routine to be created.
void vFlashCoRoutine( xCoRoutineHandle xHandle, unsigned portBASE_TYPE 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 portTickType 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(); crEND(); }
Function that creates two co-routines.
void vOtherFunction( void )
{
unsigned char ucParameterToPass;
xTaskHandle 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 );
}
}