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


Previous: 3.6.2. vTaskDelay関数

Up: 3.6. タスクの実行頻度

Next: 3.6.4. portTICK_RATE_MS


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

3.6.3. すべてのタスクを周期実行させる

サンプルプログラム

freertos_vTaskDelay_both

 先ほどのサンプルプログラムでは、2つあるうちのタスクの1つだけをxTicksToDelay関数で待たせましたが、もちろん、すべてのタスクを周期的に実行させるということもできます。実際のアプリケーションではそのようにして利用する場合の方が多いのではないでしょうか。

void prvTaskA(void *pvParameters)

{

-----

????? vTaskDelay(1);

-----

}

 

-----

 

void prvTaska(void *pvParameters)

{

-----

????? vTaskDelay(10);

-----

}

 このサンプルの実行結果は以下の通りです。Taskaがおよそ10ms毎に、TaskAがおよそ1ms毎に実行されるよう設定しているため、交互に表示されました。”ABC”が表示される個数が先ほどより減っているのは、前項のサンプルでは10msの間に連続して通信していたのに対して、こちらのサンプルプログラムでは、1回送信する度に1ms待つという処理を行っているからです。

abcABCABCABCABCABCABCABCABCABCABCabcABCABCABCABCABCABCABC

ABCABCABCabcABCABCABCABCABCABCABCABCABCABCabcABCABCABCABC

ABCABCABCABCABCABCabcABCABCABCABCABCABCABCABCABCABCabcABC

....

 ちなみにこのサンプルプログラムの場合、両方のタスクの優先度を同じにしても実行結果は以下の通り同じになります。

abcABCABCABCABCABCABCABCABCABCABCabcABCABCABCABCABCABCABC

ABCABCABCabcABCABCABCABCABCABCABCABCABCABCabcABCABCABCABC

ABCABCABCABCABCABCabcABCABCABCABCABCABCABCABCABCABCabcABC

....

?これはいずれかのタスクが優先して実行されなくても、一方のタスクがBlocked状態の間に、もう一方のタスクがRunnning状態になって実行されるという関係にあるからです。


Previous: 3.6.2. vTaskDelay関数

Up: 3.6. タスクの実行頻度

Next: 3.6.4. portTICK_RATE_MS


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