croutine.h
portBASE_TYPE xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, unsigned portBASE_TYPE uxPriority, unsigned portBASE_TYPE uxIndex );
新しいコルーチンを作成して、そしてそのコルーチンを実行可能状態リストに加える。
パラメータ:
pxCoRoutineCode コルーチン関数へのポインタ。 コルーチン関数は特別なシンタックスを必要とします − もっと多くの情報を得るために Web ドキュメンテーションのコルーチンのセクションを参照してください。
uxPriority コルーチンが実行に際しての他のコルーチンに対しての優先権・・・
uxIndex 同一関数を実行する異なったコルーチンを区別するために使われる。 それ以上のインフォメーションのために以下の例と Web ドキュメンテーションのコルーチンのセクションを参照してください。
リターン:もしコルーチン作成が成功し、そして実行可能リストに加えられたなら、 pdPASS が戻る、さもなければ ProjDefs.h に定義された誤リコードが返される。
使用例:
// 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 ); } }
コルーチンを参照出来るタイプ。 コルーチンハンドルはそれぞれのコルーチン関数の中に自動的にパスします。