FreeRTOS はオープンソースプロジェクトです。GitHub サイトで、ソースコードのダウンロード、変更や機能強化の投稿、問題の報告を行うことができます。
ドキュメントのマークダウンソースを確認する場合は、https://github.com/awsdocs/aws-freertos-docs を参照してください。
下記に、基本的な流れが説明されてます。英文です。
FreeRTOSでマルチタスクを実行する方法(ESP32 + Arduinoシリーズ)
RTOS解説は、下記が参考になります。
リアルタイムオペレーティングシステム
”ESP32のFreeRTOS入門”シリーズの記事を参照してます。
Arduino IDEでは、ベースとしてESP-IDF(Espressif IoT Development Framework)がありま
す。ESP-IDFはFreeRTOSが組み込まれています。
Arduinoのスケッチは、通常下記処理になってます。
void setup() {
}
void loop() {
}
所謂、setup()の初期設定処理部 と loop()の無限ループです。
初歩の説明です。マルチタスク処理とは、複数のタスク(アプリケーション処理)を時分割に
処理することを言います。
その為にはシングルタスク処理を、
・ タスクの優先順位(通常プライオリティと呼ばれてます)が必要です。わかりやすく言え
ば、処理を急ぐものとゆっくりで良いものに分類します。
・ お互いの同期(セマフォ)が必要です。フラッグ(旗信号)で相互に連絡します。
・ リエントラント(デイスパッチャ処理部で実施)にタスクが操作されます。つまり、各タ
スクはヂスパッチャ処理に突入しぬけていきます。
・タスクはタスクテーブルに登録されており、優先順で処理されます。
・タスクは通常イベントドリブンでwake upしますが、それ以外にタイマーで時分割処理する
方策もあります。
を考慮してマルチタスク処理に改良しなければならないです。
以下で、原理を解説されてます。
// 2022.05.31
void task1(void *pvParameters) {
Trueの間は、Task1 と Task2が実行され続けます。
while (1) {
for ( int i = 0 ; i < 50 ; i++ ) {
Serial.print(“1”);
}
Serial.print(“\n”);
10msecのウエイトいれます。
delay(10);
}
}
void task2(void *pvParameters) {
while (1) {
for ( int i = 0 ; i < 50 ; i++ ) {
Serial.print(“2”);
}
Serial.print(“\n”);
10msecのウエイトいれます。
delay(10);
}
}
void setup() {
初期化の設定です。Task1,Task2を生成します。
Serial.begin(115200);
delay(50); // Serial Init Wait
xTaskCreateUniversal(
task1,
“task1”,
8192,
NULL,
1,
NULL,
APP_CPU_NUM
task1をCore1のAPP_CPU
);
xTaskCreateUniversal(
task2,
“task2”,
8192,
NULL,
0,
task2をCore0のPRO_CPU
NULL,
APP_CPU_NUM
task2をCore1のAPP_CPU
);
}
void loop() {
無限処理ルーチンです。
delay(10);
}
〇 デモソフト(ドキュメント\Arduino\RTOS\RTOS.ino)
回路図 と デモソフトは、サポート契約のお客様のみ提供しています。
最近のコメント