Previous: 4.1. キューへの追加(後ろへの追加・待ち時間なし) |
Up: 4.1. キューへの追加(後ろへの追加・待ち時間なし) |
Next: 4.1.2. キューへの送信 |
キューを利用するためには、まずはデータを蓄積する場所としてのキューを作る必要があります。キューを作るためにはまずxQueueHandle型の変数を宣言します。これは利用するキューを特定するためのハンドラ(特定のために使用する一意な番号やアドレスを格納したもの)になります。
xQueueHandle xQueue; |
次にxQueueCreate関数を利用して、キューの形式と大きさを指定します。
関数名 |
xQueueCreate関数 |
|
関数プロトタイプ |
xQueueHandle xQueueCreate ? ( ??? unsgned portBASE_TYPE uxQueueLength, ??? unsigned portBASE_TYPE uxItemSize ? ) |
|
動作 |
キューのための領域を確保して、そのキューのためのハンドラを返します。 |
|
引数 |
uxQueueLength |
キューに格納されるデータの個数を指定します。 |
uxItemSize |
キューに格納されるデータ一つあたりのバイト数を指定します。 |
|
戻り値 |
キューのハンドラ。キューの作成に失敗した場合にはNULLを返します。 |
マイコンのメモリサイズが許す限りにおいて、データの個数とデータ一つあたりのバイト数には制限がありません。
サンプルプログラムでは、以下のようにしてint8_t型の大きさ(1バイト)のデータを64個格納できるキューを作成しています。この関数は戻り値でキューのハンドラを返しますので、先ほど宣言しておいたxQueueHandle型の変数に格納するようにします。
xQueue = xQueueCreate(64, sizeof (int8_t)); |
キューを作成するということはメモリを確保するということなのですが、そうするとキューを作成する時点でそのキューに必要なメモリが足らなければ、キューの作成に失敗することになります。キューの作成に失敗しているのにその後のプログラムを実行するとエラーになります。そこでその後のタスクの実行は、作成されたキューのハンドラがNULLでない、つまりキューの作成に失敗していないことを確認してから行います。
if (xQueue != NULL) ? { ??? //Create tasks. ??? xTaskCreate(prvTask_USARTRX_Queue_Send,??? (signed portCHAR *)"Sender",?? 200, NULL, 1, NULL); ??? xTaskCreate(prvTask_USARTTX_Queue_Receive, (signed portCHAR *)"Receiver", 200, NULL, 1, NULL);
??? /* Start the scheduler. */ ??? vTaskStartScheduler(); ? } else ? { ??? cprintf("Failed to create queue.\r\n"); ? } |
これでキューを使用するための準備は完了です。それでは実際にキューにデータを格納してみましょう。
Previous: 4.1. キューへの追加(後ろへの追加・待ち時間なし) |
Up: 4.1. キューへの追加(後ろへの追加・待ち時間なし) |
Next: 4.1.2. キューへの送信 |