Select your cookie preferences

We use essential cookies and similar tools that are necessary to provide our site and services. We use performance cookies to collect anonymous statistics, so we can understand how customers use our site and make improvements. Essential cookies cannot be deactivated, but you can choose “Customize” or “Decline” to decline performance cookies.

If you agree, AWS and approved third parties will also use cookies to provide useful site features, remember your preferences, and display relevant content, including relevant advertising. To accept or decline all non-essential cookies, choose “Accept” or “Decline.” To make more detailed choices, choose “Customize.”

Updated Jul 2025

FreeRTOS co-routines

[More about 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 );
5
6 for( ;; )
7 {
8 -- Co-routine application code here. --
9 }
10
11 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.