d664184ef8
c097f5c6 cleaning pass and refactoring 5384d522 refactoring application experiment 087ede4e refactor: readability, clearity and in some places - to a small degree - correctness 89575d8b small change to one event test ba6e7fa7 logged change 16ac6bd1 logged change 089468b3 removing make-env. in-env in the interest of keeping core language small f18015f7 Merge branch 'master' of github.com:svenssonjoel/lispbm 5b19dfda simplification and readability refactoring. 8c492889 Update gotchas.md 754221b9 Update gotchas.md a0931bac bump version e49071dc Changed behavior closure application to zero args. Application of a continuation (call-cc) with 0 args still uses the old approach where 0 args is equivalent to application to nil 35f495f3 mini tweak readme fdd01ff1 update README b21a3fa7 Update gotchas.md 92d9f561 update gotchas 0d708de7 bugfix in incremental reader and addition of a gotchas.md file for edge-case behaviors d9a38456 updated lbmref with take and drop 86b1cc1b take, drop, change to make-env returned result ea29f5ec added take and drop as built-in primitives and change to result env for make-env 55a5b1f5 added some tests and a small amount of doc e2d2f745 tweaks bccdee1f make-env and in-env 3a03232a added make-env and in-env for library-encapsulation e5b5ba66 mini tweak dce87812 removed extra ; 190b4d9e mini tweak 6864fa32 fix repl after removal of reading_done callback ea3aba39 removed reading_done_callback and made the nonsense default variants for all remaining callback 427cb37c bugfix read-program, tightening up, cleaning 119d9fd3 refactoring and tightening up 10573404 cleaning and readability 63b750b5 small tweaks d44c8bdc bug fix related to row numbers in error messages while doing incremental read. Now more precise. d0125bd1 refactoring for readability. setjmp/longjmp for escape from deeply nested errors. git-subtree-dir: lispBM/lispBM git-subtree-split: c097f5c66bd539442a48d41a66da1c657af502a1 |
||
---|---|---|
benchmarks | ||
chibios-examples | ||
doc | ||
docker | ||
esp-examples/repl | ||
examples | ||
include | ||
mascot | ||
notes | ||
old | ||
platform | ||
repl | ||
sdlrepl | ||
src | ||
tests | ||
utils | ||
videos | ||
zephyr-examples | ||
.clang_complete | ||
.gitignore | ||
.travis.yml | ||
LICENSE | ||
Makefile | ||
README.md | ||
flash_nrf52_with_stlink.sh | ||
lispbm.mk | ||
mktags.sh | ||
runinfer.sh | ||
runsa.sh | ||
setup_fw_build.sh | ||
zephyr-source-me.sh |
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.
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.
- Are you interested in microcontrollers and programming languages?
- You find it fun to mess around in C code with close to zero comments?
- Then join in the fun. Lots to do, so little time!
- Poke me by mail bo(dot)joel(dot)svensson(whirly-a)gmail(dot)com.
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
- Work in progress LispBM language reference.
- Gotchas and caveats Gotchas and caveats.
- Work in progress LispBM programming manual.
- C code documentation can be found here.
- LispBM's internals are documented as a series of blog posts.
- There are demonstrations on YouTube.
Compile a 64bit binary for linux
-
Build the repl:
cd repl
and thenmake all64
-
Run the repl:
./repl
Compile a 32bit binary for linux (Requires 32bit libraries. May need something like "multilib" on a 64bit linux)
-
Build the repl:
cd repl
and thenmake
-
Run the repl:
./repl
Compile on Raspberry Pi
To build the library exeute the following command in the lispbm folder:
PLATFORM=pi make
To build the repl
example repl do:
cd repl
make pirepl
Then start it up using ./repl
Building the library is not a prerequisite for building the repl anymore.
SDL and LispBM
In the sdlrepl
directory there is a start of a set of SDL bindings for LispBM.
To build this repl you need the following dependencies:
- libsdl2-dev -
sudo apt-get install libsdl2-dev
- libsdl2-image-dev -
sudo apt-get install libsdl2-image-dev
Then compile the repl using the command make