組み込みマイコン向けのuLispをArduino IDE環境からWio Terminalへインストール、吉例Lチカ成功しました。久しぶりのLISPに熱狂、今回は『Lispと一緒』その初回であります。ともあれuLispでコード書く環境を決めないと。結局いつものVScode環境にいたしましたが、まあまあ快適。
※Lispと一緒 投稿順 index はこちら
uLisp
メモリ、とくにRAMの限られたMCU(マイクロコントローラですぞ、マーベルなんたらではありませぬ)でLispするのはどうよ、とも思ったのです。が、使ってみると意外と快適。そして強力。素のままでは遅いけれども、場合によってはアセンブラ記述(uLispコードの中にベタでアセンブリ言語命令を埋め込めるみだいです、まだやってないケド)で高速化も可能。この辺もそそるポイントです。
uLispのホームページが以下に。
uLisp処理系は、ソースコードで配布なのですが、そのソースがArduino IDE向けの「スケッチ」形式なのです。よってArduino対応の各種マイコンに幅広く移植されてます。上記ページを見ると分かりますが小さいAVRマイコンから、Arm、ESP32、RISC-Vといろいろ対応してます。
当方がuLispの「ビークル」としましたのはこのところ遊休状態だった以下のマイコンです。
組み込み向けとしてはまあまあ強力な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してみますが、まずは以下のuLispのページを読んで、またまたサンプルプログラムそのままを動かしてみることにいたします。
Seeeduino Wio Terminalのグラフィクス機能を活用するグラフィックスのデモプログラムでやんす。
上記の rotation関数の引数として呼び出す、「波形」を与える関数定義が以下に。
とてもLispな感じで、私は嬉しいデス。
さて、Wio TerminalをUSB接続して、VScodeのシリアル・モニタを起動し、上記のソースを送信してみました。その様子が以下に。単なるコピペね。
おお、一撃で美麗グラフィックが表示されるではありませんか。Lispサイコー。
「イメージ」のセーブ、ロード
イメージといっても、上のグラフィックイメージではありませぬ。uLispの支配下にあるメモリのイメージだと思います。その単位はセル(CONSセルだよね、CARとCDRでCONSよな。)
デフォルトでSD上の ulisp.img というファイルに格納されるみたいです。
322というのは322セルをセーブしたってこと?
さてWio Terminalの電源をOFFしたのち、再度立ち上げてシリアルモニタを接続してみました。
まずは room関数で残りのセル数を確認。つづいてglobals関数で何か定義されていないか確認。nilとな。Lispらしいな。
そして load-image してみます。globalsで見てみれば、先ほどsave-imageした筈の グラフィックデモの奴らが復活してきました。
おお、一度エディタからソースを送り込めば、Wio-TerminalのSDカード側に各種関数を格納し放題(勿論 save-imageするときにファイル名をつける。)