Previous: 3.6.2. vTaskDelay関数 |
Up: 3.6. タスクの実行頻度 |
Next: 3.6.4. portTICK_RATE_MS |
サンプルプログラム |
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 |