Higher-Order Concurrency for Microcontrollers

by   Abhiroop Sarkar, et al.

Programming microcontrollers involves low-level interfacing with hardware and peripherals that are concurrent and reactive. Such programs are typically written in a mixture of C and assembly using concurrent language extensions (like and ), resulting in unsafe, callback-driven, error-prone and difficult-to-maintain code. We address this challenge by introducing - a bytecode-interpreted virtual machine that provides a message-passing based higher-order concurrency model, originally introduced by Reppy, for microcontroller programming. This model treats synchronous operations as first-class values (called ) akin to the treatment of first-class functions in functional languages. This primarily allows the programmer to compose and tailor their own concurrency abstractions and, additionally, abstracts away unsafe memory operations, common in shared-memory concurrency models, thereby making microcontroller programs safer, composable and easier-to-maintain. Our VM is made portable via a low-level bridge interface, built atop the embedded OS - Zephyr. The bridge is implemented by all drivers and designed such that programming in response to a software message or a hardware interrupt remains uniform and indistinguishable. In this paper we demonstrate the features of our VM through an example, written in a Caml-like functional language, running on the and microcontrollers.



page 5

page 9

page 10


Synchron – An API and Runtime for Embedded Systems

Programming embedded systems applications involve writing concurrent, ev...

Pirouette: Higher-Order Typed Functional Choreographies

We present Pirouette, a language for typed higher-order functional chore...

Hailstorm : A Statically-Typed, Purely Functional Language for IoT Applications

With the growing ubiquity of Internet of Things(IoT), more complex logic...

Composing bidirectional programs monadically (with appendices)

Software frequently converts data from one representation to another and...

Actris 2.0: Asynchronous Session-Type Based Reasoning in Separation Logic

Message passing is a useful abstraction for implementing concurrent prog...

General Decidability Results for Asynchronous Shared-Memory Programs: Higher-Order and Beyond

The model of asynchronous programming arises in many contexts, from low-...

Adjoint Reactive GUI

Most interaction with a computer is done via a graphical user interface....
This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.