EmbeddedHaskell: Difference between revisions

From base48
imported>Rmarko
(uart test app comment)
imported>Rmarko
(more local projects)
Line 43: Line 43:


===== CAN4DISCO =====
===== CAN4DISCO =====
UART2CAN bridge (with kernel support via SLCAN protocol) and CAN development board/firmware.


* https://git.48.io/can4disco
* https://git.48.io/can4disco
Line 48: Line 50:


===== ODrive experimental firmware =====
===== ODrive experimental firmware =====
Brushless DC motor controller firmware for ODrive board.


* https://git.48.io/odrive
* https://git.48.io/odrive
* https://hackaday.io/project/11583-odrive-high-performance-motor-control/
* https://hackaday.io/project/11583-odrive-high-performance-motor-control/
===== HEXAMON Firmware =====
Beehive monitoring node firmware.
* https://github.com/lucansky/hexamon-firmware
===== Various =====
* https://github.com/distrap/ivory-tower-base
* https://github.com/distrap/ivory-tower-canopen
* https://git.48.io/ivory-tower-hxstream
* https://git.48.io/ivory-tower-helloworld


==== Working with Ivory Tower ====
==== Working with Ivory Tower ====

Revision as of 17:49, 22 June 2017

"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.

Links

Frameworks

Ivory Tower

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.

Repositories

Papers

Projects

Local projects

CAN4DISCO

UART2CAN bridge (with kernel support via SLCAN protocol) and CAN development board/firmware.

ODrive experimental firmware

Brushless DC motor controller firmware for ODrive board.

HEXAMON Firmware

Beehive monitoring node firmware.

Various

Working with Ivory Tower

Prepare environment

Install stack first - http://docs.haskellstack.org/en/stable/install_and_upgrade/

<syntaxhighlight lang="bash">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/</syntaxhighlight>

Running UART test

Test application located in

<syntaxhighlight lang="bash">cd ivory-tower-stm32/ivory-bsp-tests</syntaxhighlight>

<syntaxhighlight lang="bash"># set platform to f4 discovery cat > default.conf [args] platform="f4discovery"

make bsp-uart-test cd bsp-uart-test

  1. now look around carefuly
  2. oO
  3. Oo
  4. ...
  5. then flash it

arm-none-eabi-gdb --ex 'target extended-remote /dev/f4gdb' \

 --ex 'monitor swdp_scan' \
 --ex 'attach 1' \
 --ex 'load' image'
  1. try talking to /dev/f4uart
  2. bsp-uart-test app accepts characters '1' for output on and '2' for output off

screen /dev/f4uart 115200</syntaxhighlight>

Copilot

Atom

Ion