uLisp を Arduino UNO にインストールした

概要


uLisp と書いて Micro Lisp と読む。電子回路まわりの人たちは小文字の u をマイクロと読ませる習慣がある。
uLisp は Micro Controller Unit、マイコンで使える Lispである。
http://www.ulisp.com/
似た感じのuPythonもあるが、リソースが大きいのでuPythonは32ビットCPUでないと使えない。
それに対して uLisp は Arduino Uno のような 8 ビットCPUでも使用できる。

インストール


インストールも簡単。Arduino IDE がインストールされていれば、下記のulisp.ino をコピペしてArduino Unoに転送すればすぐに使える。
https://github.com/technoblogy/ulisp --> ulisp.ino を表示して、rawモードにしてコピペーすればOK
ただし、転送時にこんなメッセージが表示される。(Arduino IDE 1.8.12/Win10で検証)
最大32256バイトのフラッシュメモリのうち、スケッチが31512バイト(97%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1534バイト(74%)を使っていて、ローカル変数で514バイト使うことができます。

残りのメモリが足りないので、Unoでは今後の拡張は期待できない

簡単な使い方


Arduino IDEのシリアルモニターまたはTera Termなどのシリアル端末ソフトで 9600 bps 接続する。
こんな感じでLispのバージョンとプロンプトが表示される
uLisp 3.3
314>

">"に続けて (+ 1 2)とか入力すると 1 + 2 の計算結果が表示される
uLisp 3.3
314> (+ 1 2)
3

314>

マイコン用のLispなので13番ピンのLEDのオンオフもできる。
まずは、Arduino言語でいうところの pinmodeの変更する”(pinmode 13 t)を入力する
314> (pinmode 13 t)
nil

314>

LEDをオンにするのは(digitalwrite 13 t)と入力する
314>
(digitalwrite 13 t)
nil

314>

LEDをオフにするのは(digitalwrite 13 nil)と入力する
314>
(digitalwrite 13 nil)
nil

314>

Lispの世界では"t"がtrueで"nil"がfalseだと思えばいい
LEDをチカチカしたければ、1秒ごとにLEDの点滅を繰り返せばいい。
そんなときは (loop (digitalwrite 13 t)(delay 1000)(digitalwrite 13 nil) (delay 1000))と入力する
314> (loop (digitalwrite 13 t) (delay 1000) (digitalwrite 13 nil) (delay 1000) )

延々とLEDをチカチカし続ける。
再びLispの関数を入力したいときは、~ を入力して Enter キーを押す。
下記のように表示される
Error: escape!
314>


残念なこと


純正のArduino UNO以外では今のところATMega328P版のインストールに成功していない

HiLetgo の Arduino Nano互換機で失敗


Arduino IDEでArduino Nanoを選択してコンパイルすると失敗する

text section exceeds available space in board最大30720バイトのフラッシュメモリのうち、スケッチが31512バイト(102%)を使っています。

最大2048バイトのRAMのうち、グローバル変数が1534バイト(74%)を使っていて、ローカル変数で514バイト使うことができます。
スケッチが大きすぎます。http://www.arduino.cc/en/Guide/Troubleshooting#size には、小さくするコツが書いてあります。
ボードArduino Nanoに対するコンパイル時にエラーが発生しました。

まあ、Unoでも問題ないだろうと手元にあったHiLetgo の Arduino Nano互換機でuLispを転送しようとすると下記のエラーで失敗した。
スケッチの書き込み中にエラーが発生しました
avrdude: verification error, first mismatch at byte 0x7800
0xff != 0x60
avrdude: verification error; content mismatch

Leonardもやっぱりだめ


Nanoでもコンパイルに失敗したが、Leonardも同様の現象が発生。サポート外だから仕方がない。

exit status 1
'WORKSPACESIZE' was not declared in this scope

広告コーナー


Arduino Uno Rev3 ATmega328 マイコンボード A000066
Arduino Uno Rev3 ATmega328 マイコンボード A000066

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

なるほど(納得、参考になった、ヘー)

この記事へのコメント