Lispと一緒(1) uLisp、Seeeduino Wio Terminal+VScodeで快適?

Joseph Halfmoon

組み込みマイコン向けのuLispをArduino IDE環境からWio Terminalへインストール、吉例Lチカ成功しました。久しぶりのLISPに熱狂、今回は『Lispと一緒』その初回であります。ともあれuLispでコード書く環境を決めないと。結局いつものVScode環境にいたしましたが、まあまあ快適。

※Lispと一緒 投稿順 index はこちら

uLisp

メモリ、とくにRAMの限られたMCU(マイクロコントローラですぞ、マーベルなんたらではありませぬ)でLispするのはどうよ、とも思ったのです。が、使ってみると意外と快適。そして強力。素のままでは遅いけれども、場合によってはアセンブラ記述(uLispコードの中にベタでアセンブリ言語命令を埋め込めるみだいです、まだやってないケド)で高速化も可能。この辺もそそるポイントです。

uLispのホームページが以下に。

Lisp for microcontrollers

uLisp処理系は、ソースコードで配布なのですが、そのソースがArduino IDE向けの「スケッチ」形式なのです。よってArduino対応の各種マイコンに幅広く移植されてます。上記ページを見ると分かりますが小さいAVRマイコンから、Arm、ESP32、RISC-Vといろいろ対応してます。

当方がuLispの「ビークル」としましたのはこのところ遊休状態だった以下のマイコンです。

Seeed Studio Wio Terminal

組み込み向けとしてはまあまあ強力なArm Cortex-M4コア搭載のMicroChip社SAMD51機です。LCDとSDカードスロットも標準装備しているので、uLispの機能を使いやすいのもポイントです。

VSCodeでuLisp

さて、インストールがAruduino IDEに「寄生」しているので、LチカするときにはArduino IDEのシリアルモニタを使いました。しかし、Arduino IDEはC++に一皮かぶせた .ino 形式(スケッチ)のための環境なので、Lispを書くには向いてないのでは?と思いました。最初、伝統の「秀丸エディタ+TeratermPro」で作業しようかとも思ったのですが、結局、VScodeとVScode用のシリアル・モニタを使うことにいたしました。

まず Lisp用のシンタックスハイライトは以下のExtensionを使わせていただきました。Yasuhiro Matsumoto様、ありがとうございます。VScode_Lisp_extension

さて、VScodeでLispしてみますが、まずは以下のuLispのページを読んで、またまたサンプルプログラムそのままを動かしてみることにいたします。

Surface of rotation

Seeeduino Wio Terminalのグラフィクス機能を活用するグラフィックスのデモプログラムでやんす。rotation_lisp

上記の rotation関数の引数として呼び出す、「波形」を与える関数定義が以下に。sinfun_lisp

とてもLispな感じで、私は嬉しいデス。

さて、Wio TerminalをUSB接続して、VScodeのシリアル・モニタを起動し、上記のソースを送信してみました。その様子が以下に。単なるコピペね。VScode_ulisp_Serial_monitor

そして動作結果をみやれば、こんな感じ。demoGraphicsEC

おお、一撃で美麗グラフィックが表示されるではありませんか。Lispサイコー。

「イメージ」のセーブ、ロード

イメージといっても、上のグラフィックイメージではありませぬ。uLispの支配下にあるメモリのイメージだと思います。その単位はセル(CONSセルだよね、CARとCDRでCONSよな。)

デフォルトでSD上の ulisp.img というファイルに格納されるみたいです。
save_image

322というのは322セルをセーブしたってこと?

さてWio Terminalの電源をOFFしたのち、再度立ち上げてシリアルモニタを接続してみました。

まずは room関数で残りのセル数を確認。つづいてglobals関数で何か定義されていないか確認。nilとな。Lispらしいな。

そして load-image してみます。globalsで見てみれば、先ほどsave-imageした筈の グラフィックデモの奴らが復活してきました。load_image

おお、一度エディタからソースを送り込めば、Wio-TerminalのSDカード側に各種関数を格納し放題(勿論 save-imageするときにファイル名をつける。)

鳥なき里のマイコン屋(174) マイコンでLISP、吉例Lチカ、Wio Terminal へ戻る

Lispと一緒(2) uLisp、Lispのリハビリその1、ループを回す へ進む