【チラシのうら 42日目】約3倍 高速化しました。
Ver 0.4でライフゲームを動かしたら思いのほか遅かったので改良していました。
遅い原因
1) 実行時にソーステキストをトークン分割と評価を行っている。
2) 配列変数の参照時の添え字評価にカリキュレータを使用している
で、1)の解決の為にVer 0.5では評価済トークの状態でソースコードを保持しましたが、メモリー使用量が多くなり過ぎました。
Ver0.6ではソース入力時にキーワードを中間コードに変換して保持する方式に変更。
VisualStudioで開発してArduinoIDEで書き込みしているので、M5Stackに書き込んで動作確認する段になって
ESP32はワード境界を跨げない
事を知りました (;^ω^)
int a[2];
char *b = a;
*(int *)&b[1] = 10 ;
とかやるとカーネルパニックを起こします。
中間コードを uint8_t の配列で構成していたので運悪く(?)ワード境界を跨ぐとカーネルパニックでリセットがかかります。
ワード境界を跨ぐと落ちる問題の回避の為に無駄な処理を入れる羽目になりチョット納得いっていませんが画期的な解決策も思いつかないので取り合えずコレで進めます。
現状でVer0.4比で約3倍の速度向上になっています。
▼ Youtubeショート動画








