wasm3
wasm3
ざっと見てみる
ビルド方法
- PCの場合
-- cmakeを使えばできそう
- マイコンの場合
-- wasimakeというのを使うらしい
ESP32対応
-- PSRAMが有効なESP32にのみ対応
-- platformio対応
ESP8266対応
-- platformio対応
所感
ビルドはできそう
組み込み方法
とりあえずLCDにHello Worldを表示させたい。
これが役に立ちそう。
WASMビルド方法
そもそもどうやってWASMのバイナリ(?)を作るのだろう
-- asbuildというコマンドでTypeScriptのようなものから変換できるらしい。
-- asbuildはブラウザで動くのかな?
--- emscriptenなどを使えばできそうな気もするが、そのもズバリの作例はまだ見つからない
--- ブラウザなどでのインタラクティブな開発ができないとWASMを使う意味は少ない。
--- 少ない努力でこれは実現できそうだが、そのものずばりで流用できるものはなさそう。
もっと楽そうな方法
-- これがおぜん立て済みで簡単そう
疑問メモ
- 外部関数との連結時はシンボル名で参照しているのか?バイナリ内にシンボルが埋め込まれている?
-- 埋め込まれているっぽい
動作検証
-- Wasm3 0.4.5
-- AssemblyScript 0.9.0, 0.12.5
- メモ
-- m3_LinkRawFunction の第二引数の名前が大事らしい
--- これとtypescriptのファイル名が同じでないと Error: missing imported function () のエラーが出るように見える
-- $ npx asc assembly/index.ts -b app.wasm -t app.wat -O3z --runtime half --noAssert --use abort=
--- O3zが大事なのかな? オプションを変えると動かない
--- optimezeだけだとだめだな。
---- asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --runtime=half --sourceMap --noAssert -O3z --use abort=
----- これでもできた やはり-O3zが大事のようだ
-- AssemblyScript 0.9.0より大きいと動かない?
--- そんなことはなかった 0.12.5でも動いた。
関数をloopごとに呼ぶ方法が不明
- AssemblyScript 0.9.0なら問題ない
- 0.9.1でも問題ない
- 0.9.2でも問題ない
- 0.9.3ではビルドできない
- 0.9.4ではビルドできない
- 0.10.0だとおかしい TG1WDT_SYS_RESET
- 0.12.5だとおかしい Debug exception reason: Stack canary watchpoint triggered (loopTask)
ワンショットで実行する分にはうまく動いている。
LoopTaskのスタックが浅過ぎるのではないだろうか?
標準のループは何もしないようにして、別のtaskで実行することで、ちゃんと動くようになった。
0.12.5で動けば大丈夫だろう。