8.picocalcでjpegデータを表示したい
しばらく前の事、ESP32と言う液晶(320x240)付きのマイコンでjpgデータを表示しようと苦戦していた頃。
高速と話題の bitbank2/JPEGDEC というデコーダをmicropythonに実装して試してみた。
結果としてはESP32のROMの速度が足を引っ張って動画っぽく表示するのは無理だったんで、監視カメラの画像をWiFiで飛ばして表示するようになった。
せっかく移植したんだから、今回はpico 向けにして、ついでに任意で import して使える mpy ファイルにしよう。
と思って修正始めたんだが大ハマリ。
picoが使ってるCPUは Cortex-M0 というんだが、除算機能を持っていない。
C言語で除算を使うコードを書くと今どきのCPUは除算命令に置き換えるが、picoだと関数呼び出しに置き換える。
micropython本体に組み込むドライバだったら、標準ライブラリにその関数があるので問題にならない。
ただ mpy ファイルにする際は、外部ライブラリが使えない仕様なので、自前で用意しないとならない。
とはいえ、自作は面倒なので、google さんに相談して、なんとかソースコードを発見。
いくつかの関数はコンパイルできたんだが、肝心の除算だけはエラーになる。
結局、問題の箇所を探すため-S オプションを付けてコンパイルして、アセンブラソースから除算の箇所を検索。
除算を自前の関数(mydiv)で置き替えてという力業で解決。
実に美しくない。
それでも 320x200の画像が 50ms 程度で展開できたのでまぁOK。(pico2 だからこれで済んだがpicoだと100ms以上かかりそう)
ただ、SDカードからの読み込みがとにかく遅くて足を引っ張ってる。100kB/s ぐらいしか出てない。
12kBのデータの読み込みに120msなんてかかるんじゃ動画にならない。
次の課題は SD カードなのである。