2023年3月21日火曜日

ESP-IDF FreeRTOS その2

FreeRTOS で分かり難かった点です。

裏を取っていませんので「のよう」が多いのですが、ひとまず意図した動作にはなっています。今後、多様な条件で組んでいく中で確認できればと思います。

1. Queue size
文字列のバイト数ではなく、ポインタのバイト数を指定。sizeof で取得可。大き過ぎても小さ過ぎてもダメ。
https://stackoverflow.com/questions/67346516/using-queue-of-string-in-freertos
// Queue size
xQueue = xQueueCreate(1, 16);
//Check Queue size
Serial.println(sizeof(data)); 

2. Core と WDT
今回、priority, core, WDT の組み合わせは、なんとなく、でうまく動作しました。早々にテストに進みましたが、後日、要調整箇所です。
https://lang-ship.com/blog/work/esp32-freertos-l03-multitask/#toc6
Core1: APP_CPU_NUM without WDT
Core0: PRO_CPU_NUM with WDT 

3. loop
loop にも priolity があるとのこと。今回は1秒毎に実施するよう指定しました。
void loop() { //priolity 2, APP_CPU_NUM:Core1
  delay(1000);
}

4. tick
ESP-IDFでは、1tick = 1msec のようでした。
vTaskDelayUntil( &xLastWakeTimeSend, 1000 / hz / portTICK_RATE_MS );

5. Queue の送受信
送信はすぐに実施。受信はSDへの書き込み間隔で待機。
別の変数に格納。
xQueueSendToBack(xQueue, &accData, 0);
xQueueReceive(xQueue, &recData, SDWriteTime*1000 / portTICK_RATE_MS);


0 件のコメント:

コメントを投稿