Go to file
Benjamin Vedder 070e5cde9b Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684
d2f9c684 removed the variable memory as the new hash-env seems to perform well enough
128813bf coercing all 64bit tests to pass
fc62e27a adding an nfibs example in experiment_repl
ecdb2720 extensions table outside of lbm memory, rearrange of lbm_init arguments
a95f3c94 moved variable storage to lbm memory
6d3af68d tiny tweak
c789fcc4 Work in progress moving stacks into lbm_memory

git-subtree-dir: lispBM/lispBM
git-subtree-split: d2f9c68466cc0cb19446bc3a9a06e5855b1690b0
2024-01-08 21:54:33 +01:00
benchmarks Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
chibios-examples Squashed 'lispBM/lispBM/' changes from c0fb4af8..4cc6358a 2022-09-16 10:45:44 +02:00
doc Squashed 'lispBM/lispBM/' changes from b718cb68..202b5763 2023-12-23 20:39:28 +01:00
docker Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
esp-examples/repl Squashed 'lispBM/lispBM/' changes from c2e0433a..aba5cf5a 2022-09-20 11:32:37 +02:00
examples Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
experiment_repl Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
include Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
mascot Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
notes Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
old Squashed 'lispBM/lispBM/' changes from 6199703d..43ebce71 2022-03-25 15:47:05 +01:00
platform Squashed 'lispBM/lispBM/' changes from 60d7c83f..c0fb4af8 2022-09-16 09:25:46 +02:00
sdlrepl Squashed 'lispBM/lispBM/' changes from 1eceb43f..1267d006 2023-01-24 09:19:05 +01:00
src Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
tests Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
utils Squashed 'lispBM/lispBM/' changes from 6f442405..28c56c43 2022-09-04 16:08:58 +02:00
videos Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
zephyr-examples Squashed 'lispBM/lispBM/' changes from 445930ec..d23c7fe2 2022-09-23 14:04:35 +02:00
.clang_complete Squashed 'lispBM/lispBM/' changes from aba5cf5a..445930ec 2022-09-21 14:46:29 +02:00
.gitignore Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
.travis.yml Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
LICENSE Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
Makefile Squashed 'lispBM/lispBM/' changes from 6f442405..28c56c43 2022-09-04 16:08:58 +02:00
README.md Squashed 'lispBM/lispBM/' changes from 093a6a88..d005f690 2023-11-22 14:53:49 +01:00
flash_nrf52_with_stlink.sh Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
lispbm.mk Squashed 'lispBM/lispBM/' changes from 55553f58..d2f9c684 2024-01-08 21:54:33 +01:00
mktags.sh Squashed 'lispBM/lispBM/' changes from 3836952f..cdfd116c 2022-07-06 10:18:45 +02:00
runinfer.sh Squashed 'lispBM/lispBM/' changes from 6199703d..43ebce71 2022-03-25 15:47:05 +01:00
runsa.sh Squashed 'lispBM/lispBM/' changes from 948bb6bc..9e5d4044 2023-10-06 15:54:52 +02:00
setup_fw_build.sh Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00
zephyr-source-me.sh Squashed 'lispBM/lispBM/' content from commit 748477b9 2022-01-29 17:26:45 +01:00

README.md

lispBM (LBM)

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.

LispBM mascot

The LispBM mascot, Lispy the llama, was created by PixiLadyArt. Thank you, Pixi!

Want to get involved and help out?

There are lots of interesting things to code on in and around the LispBM runtime system. I would love to interact with people who are interested in high-level programming languages on microcontrollers (or elsewhere) so please do not be shy to make contact. Together we can make great stuff happen ;)

  1. Are you interested in microcontrollers and programming languages?
  2. You find it fun to mess around in C code with close to zero comments?
  3. Then join in the fun. Lots to do, so little time!
  4. Poke me by mail bo(dot)joel(dot)svensson(whirly-a)gmail(dot)com.

There are areas where insights and help would matter greatly. Some I can think of are:

  1. Running LispBM on system simulators.
  2. LispBM efficiency, compilation, byte-code and real time garbage collection.
  3. Code size optimisation. Do more with less, while maintaining performance.
  4. Documentation and testing.
  5. Useful extension libraries.
  6. Lisp scriptable home automation.
  7. Lisp scriptable MIDI sequencers.
  8. Lisp scriptable Audio synthesizers.
  9. ...

Getting started

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.

Documentation

Compile a 64bit binary for linux

To really experience LispBM one should use it on a microcontroller. The repl available for X86 is currently very limited and "hacky". I use this repl as an experiment platform while working on the LBM implementation. A more serious attempt at a useful desktop/laptop/rpi LispBM repl is work in progress.

  1. Build the repl: cd experiment_repl and then make all64

  2. Run the repl: ./repl

Compile a 32bit binary for linux (Requires 32bit libraries. May need something like "multilib" on a 64bit linux)

  1. Build the repl: cd experiment_repl and then make

  2. Run the repl: ./repl