Endless trail

寄り道好きのひとりごと
<< April 2020 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>
 
PR
RECENT COMMENT
  • Wifi throttleの仲間がいた⁉
    MECY (02/14)
  • Wifi throttleの仲間がいた⁉
    okiraku346 (02/14)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    MECY (08/30)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    KAKKA (08/30)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    MECY (08/27)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    KAKKA (08/26)
  • Next18のSmileDecoderを試す
    MECY (08/13)
  • Next18のSmileDecoderを試す
    なごでん (08/13)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    KAKKA (08/11)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    MECY (08/11)
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
Wifi Throttle をマルチタスク化してはみたが・・

JUGEMテーマ:鉄道

 マルチロータリスロットルを装備している「Smile Wifi Throttle」ですが、機能を都度増やし続けているため少しずつですが、動作のもっさり感が気になってきました。何かサクサク感にもってゆく為の抜本的な手立てがないか日々考えていました。実はESP32、2つのCPUが載っているらしいです。ですがなぜかユーザが作成するソースコードは1個のCPUでしか動いていないらしく、徐々に増加するソースコードをもう一つのCPUに処理を分散させてやれば理論上はサクサク動いてくれるハズです。ということでレスポンス向上の奥の手として残していたESP32のマルチタスク化に挑戦してみました。

 

 ESP32のマルチタスクをネットで調べるといくつか参考になる記事を見ることができます。今回参考にさせていただいたのは次のサイトです。 ”ESP32 ( ESP-WROOM-32 ) » Arduino – ESP32 のマルチタスク ( Dual Core ) を試す’’

 参考に閲覧した内容から、今回やることのイメージは次になります。

 

  Smile Wifi Throttle」のスケッチの機能(主に関数単位)を整理して2スロットル分毎に分割する。

 ∧割した1スロットル分の一方を使っていなかったCPU0側へ処理する様にコードを書き換える。

 

-----------------「Smile Wifi Throttle」マルチタスクのスケッチ構成イメージ--------------

  

void タスク名(void *pvParameters){
  while(1){
      ← 分割したスロットル2の処理部分を記述
  }
}

void setup(){
  xTaskCreatePinnedToCore(        ←マルチタスク化の構文通りに追加する
           タスク名,
           "タスク名",
           スタックメモリサイズ,
           NULL,
           タスク優先順位,
           タスクハンドルポインタ,
           Core ID
  );
}

void loop(){

    ← 分割し残したスロットル1処理の部分を記述

}

 

 先人様の記事からESP32のマルチタスク化はESP32のソフトの仕様上問題なく出来そうなのですが、1つ気になる点があります。

それはデフォルトで使用していないCPU0側は、ESP32のシステムタスクが動いるらしいという事です。つまりCPU0はESP32のシステムタスク処理専用であって、ユーザ作成のタスクを処理する余裕はあまりないかもしれないという点です。なのでここは一発賭けに近いですがやってみるしかない感じです。

 

 次に適当にスケッチを上記の形に2つの処理ループ構成にして、”スケッチビルト”⇒”ボード書き込み”まではなんとかできました。

ここまではそこそこ順調でしたが、いざ「Smile Wifi Throttle」を動かしてみると・・・

 

 ◆マルチタスク化したスケッチ:DsAirとの認証 が待ち状態までは正常そうです。

 

 ◆マルチタスク化したスケッチ:DsAirとの認証 スタートでWifi Throttleモードへ移行中です。

 

 ◆マルチタスク化したスケッチ:DsAirとの認証後、 ああ!文字表示がおかしい この後表示は消えて再起動しました。

 

 

 マルチタスク化後の結果ですが、写真の様にDsAirに接続する途中で再起動が起こりまくります。この状態では使える代物ではありません。恐らくWifiが動きまくるのでCPU0にタスクを振ってもCPU0側のパワー不足でWifi Throttleモードが起動できず、力尽きて再起動していると思います。Wifiの動作を止めればマルチタスク化したスケッチでも動くかもしれませんが、それでは「Wifi Throttle」になりませんよね。マルチタスク化作戦ははあえなく撃沈し残念な結果となりました。

 

 教訓:「ESP32は普通にシングルタスクでコーデングするに限る」です。

スポンサーサイト
- | 22:43 | - | - |
コメント
コメントする









 

(C) 2020 ブログ JUGEM Some Rights Reserved.