RTOS システムの記事 - デュアルコア システムでのタスクの優先順位のスケジューリングと設計
概要
タスクの優先度はOSによって与えられており、現在のSDKのFreeRTOSを例にすると合計25個の優先度が与えられており、数が大きいほど優先度が高くなります。ユーザーが実際に使用する優先度は通常それよりも低いため、システムリソースを節約するために、システム定数の値を定義することで優先度の範囲を制限できます。
ESP-IDF で許可される最大優先度は 25 です。
#define configMAX_PRIORITIES ( 25 )
最も低い優先度は 0 で、デフォルトでは「アイドル タスク」の優先度が最も低い優先度として設定されます。
#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U )
顧客定義コードの推奨優先順位範囲は 0 ~ 15 です。
実際の開発においては、将来システムの機能拡張(新しいタスクの追加など)が発生した際に、大幅な優先度の調整が不要となるよう、タスクの優先度設定にズレが生じていても問題ありません。
RTOS の基本的なスケジューリング原理は、前のセクションのタスク スケジューリングと RTOS の 3 つのタスク モデルで紹介されています。一般に、RTOS はプリエンプティブ スケジューリングとタイム スライス スケジューリングをサポートします。
ただし、一部の ESP32 はデュアルコア システムであり、そのスケジュール ルールはネイティブの FreeRTOS とは多少異なります。以下に、デュアルコア システムにおけるスケジューリング ルールとタスクの優先順位を合理的に設計する方法について説明します。
デュアルコア システムでのプリエンプティブ スケジューリング
従来の FreeRTOS では、スケジューラが実行する新しいタスクを選択するとき、常に現在準備完了状態にある最も優先度の高いタスクを選択します。