An interpreter for a concurrent lisp-like language with message-passing and pattern-matching implemented in C.
LispBM is a lisp or scheme like programming language for
microcontrollers. LispBM also borrows a couple of ideas from Erlang
when it comes to concurrency, message passing, pattern matching and
process monitoring. The LispBM runtime system can be compiled for
either 32 or 64 bit platforms and runs on a wide range of hardware
such as for example STM32, NRF52, ESP32 or X86. When running the
LispBM runtime system on a microcontroller it can be built on top of
ChibiOS, FreeRTOS or ZephyrOS or, if you are adventurous, on bare-metal.
LispBM can also be built to run on top of a regular linux.
The LispBM mascot, Lispy the llama, was created by
PixiLadyArt. Thank you, Pixi!
The easiest way to get started with LispBM programming is to use
VESC-Tool together with the
VESC EXPRESS Firmware on an esp32c3.
VESC-Tool gives you access to a very capable IDE for lisp programming on embedded systems
and the VESC Express firmware provides built in functionality to interface with CAN, WIFI, BLE and UART
as well as GPIO and display drivers.
If you are looking for a more bare-bones way to add scripting capabilities to your
embedded system, LispBM is quite platform independent and can be compiled for many
different MCUs and systems. LispBM can tie into the rest of your application via
what we call “extensions” which are C functions that can be called from your LispBM scripts.
There is an example REPL implementation that runs on X86 32 or 64bit in the repl
directory.
The REPL depends on libreadline.
REPL Dependencies for 32Bit executable on 64Bit linux:
On Ubunty you can obtain the depencies by:
sudo apt-get install gcc-multilib libreadline-dev lib32readline-dev libpng-dev libpng-dev:i386
Then issue command make
in the repl directory.
There is also a Nix flake (see details below). You can build and run the repl using nix run
. This will build the 32 bit version. For the 64 bit repl you instead run nix run .#repl64
.
There is a Nix flake to help you build the repl and documentation. It outputs packages for the 32 and 64 bit repl: repl
and repl64
, the documentation: doc
, and the doxygen source code documentation: c-doc
. Assuming you have Nix installed, you can build these using
nix build .#<package>
The generated output is then placed in the result/
directory. However doc
and c-doc
packages might not make much sense to build in this way because they are supposed to generate files inside the repository tree. Therefore, it makes more sense to instead enter their respective development environment with nix develop .#<package>
. This places you in a new shell with the required dependencies installed where you can build them with make
.