"Life is too short to C" -- Adluc
There are now serveral ways to generate C code for embedded applications with domain specific languages embedded in Haskell. This allows us to use type system and powerful compiler to catch errors sooner and get close to 'if it compiles it works' experience for embedded world.
The Ivory Language is an eDSL for safe systems programming. You can think of Ivory as a safer C, embedded in Haskell.
The Tower Language is an eDSL for composing Ivory programs into real-time systems. Tower programs specify communication channels, tasks, and signal handlers, and generate Ivory code which implements scheduling and communication for real-time operating systems.
- Guilt Free Ivory https://github.com/GaloisInc/ivory/blob/master/ivory-paper/ivory.pdf
- Building Embedded Systems with Embedded DSLs https://github.com/GaloisInc/smaccmpilot-experiencereport/raw/master/embedded-experience.pdf
ODrive experimental firmware
Working with Ivory Tower
Install stack first - http://docs.haskellstack.org/en/stable/install_and_upgrade/
mkdir embedded cd embedded git clone https://github.com/GaloisInc/ivory/ git clone https://github.com/GaloisInc/tower/ git clone https://github.com/GaloisInc/ivory-tower-stm32/
Running UART test
Test application located in
# set platform to f4 discovery cat > default.conf [args] platform="f4discovery" make bsp-uart-test cd bsp-uart-test # now look around carefuly # oO # Oo # ... # then flash it arm-none-eabi-gdb --ex 'target extended-remote /dev/f4gdb' \ --ex 'monitor swdp_scan' \ --ex 'attach 1' \ --ex 'load' image' # try talking to /dev/f4uart # bsp-uart-test app accepts '0' '1' chars which should toggle led screen /dev/f4uart 115200