Previous: 3.10. タスクの削除(他のタスク) |
Up: 3. タスク管理 |
Next: 3.12. タスクのモニタ |
サンプルプログラム |
freertos_task_delete_itself |
優先順位の異なる複数のタスクが自分自身を削除するというサンプルです。使用している関数は前項のものと同じです。実行結果は以下のようになります。
ABCDE |
コラム 1?1 メモリの開放
FreeRTOSのタスクのためのメモリはvTaskDelete関数を実行した時点で解放されるのではなくその後Idleタスクが実行された時点で解放されます。つまりIdleタスクがなければ、vTaskDelete関数した後どれだけ時間が経ったとしても、メモリは解放されません。そのためIdleタスクが起動しないようなタスク構成(すべてのタスクがBlocked状態となっている期間が無い)だと、たとえvTaskDelete関数を実行したとしても、連続してタスクを作成しているとそのうちにヒープ領域が不足してタスクが作成できなくなります。 後述のマウス・コントローラのサンプルプログラムでは、メモリが足りなくてタスクを作れないときはメモリが空くまで待つという方法を採っています。この場合Blocked状態にならないタスクがあった場合にはいつまで経ってもメモリが解放されないので、そのようなタスクは作らないように意識しておかなければいけません。 |
Previous: 3.10. タスクの削除(他のタスク) |
Up: 3. タスク管理 |
Next: 3.12. タスクのモニタ |