マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 3.7. Idle Hook機能

Up: 3. タスク管理

Next: 3.9. 優先度の取得


マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法: 3. タスク管理:

3.8. 優先度の変更

サンプルプログラム

freertos_priority_change_3_task

 これまでのプログラムでは、タスクの優先度は最初にカーネルに登録されたときから一定でした。FreeRTOSでは、一度登録されたタスクの優先度を、後から自由に変更することができます。

 タスクの優先度を変更するためには、vTaskPrioritySet関数を使用します。

関数名

vTaskPrioritySet関数

関数プロトタイプ

void vTaskPrioritySet ( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority )

動作

タスクの優先度を再設定します。

引数

pxTask

変更するタスクのタスクハンドラを指定します。NULLを指定するとこの関数を実行したタスクを指定したことになります。

uxNewPriority

再設定する優先度を指定します。

戻り値

無し。

 タスクハンドラは、xTaskCreate関数でタスクを登録する際に引数pvCreatedTaskで指定する変数です。タスクハンドラは、あとあとタスクを変更したり、削除したりするときに、タスクを特定するために使用します。タスクハンドラを作るためには、以下のようにxTaskHandle型の変数を宣言しておきます。

xTaskHandle xTaskBHandle;

 そしてxTaskCreate関数の実行時に、引数pvCreatedTaskに、先ほど宣言したxTaskHandle型の変数を渡します。

xTaskCreate(prvTaskBC, (signed portCHAR *)"TaskB", 192, &TaskB_symbol, 2, &xTaskBHandle);

 すると、このタスクハンドラ、この例で言えば変数xTaskBHandleを使用することにより、TaskBを指定して、タスクの変更、削除等の操作が行えるようになります。

 サンプルプログラムでは、以下のようにして、vTaskPrioritySet関数でxTaskBHandle等のタスクハンドラを指定し、タスクの優先度を変更しています。

vTaskPrioritySet(xTaskBHandle, 1);

 サンプルプログラムでは、TaskAの優先度を一番高くしているのですが、TaskA10ms毎にしか実行されません。その間に実行されることとなるTaskBTaskCの優先度をTaskAが入れ替えています。

void prvTaskA(void *pvParameters)

{

? int8_t* pcTaskName;

? pcTaskName = (int8_t *)pvParameters;

? while(1)

??? {

????? cprintf(pcTaskName);

????? vTaskPrioritySet(xTaskBHandle, 1);

????? vTaskPrioritySet(xTaskCHandle, 2);

????? vTaskDelay(1);

????? cprintf(pcTaskName);

????? vTaskPrioritySet(xTaskBHandle, 2);

????? vTaskPrioritySet(xTaskCHandle, 1);

????? vTaskDelay(1);

??? }

}

 その結果、サンプルプログラムを実行すると以下のように表示されます。TaskCの優先度が高い間は”C”が、TaskBの優先度が高い間は”B”が表示されます。

ACCCCCCCCCCCCABBBBBBBBBBACCCCCCCCCCCABBBBBBBBBBACCCCCCCC

CCCBBBBBBBBBBBBACCCCCCCCCCABBBBBBBBBBBACCCCCCCCCCABBBBBB

BBBBBACCCCCCCCCCABBBBBBBBBBBACCCCCCCCCCABBBBBBBBBBBACCCC

....


Previous: 3.7. Idle Hook機能

Up: 3. タスク管理

Next: 3.9. 優先度の取得


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。