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 $\texttt{FreeRTOS tasks}$ and $\texttt{semaphores}$), resulting in unsafe, callback-driven, error-prone and difficult-to-maintain code. We address this challenge by introducing $\texttt{SenseVM}$ - a bytecode-interpreted virtual machine that provides a message-passing based $\textit{higher-order concurrency}$ model, originally introduced by Reppy, for microcontroller programming. This model treats synchronous operations as first-class values (called $\texttt{Events}$) 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 $\textit{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 $\texttt{nRF52840}$ and $\texttt{STM32F4}$ microcontrollers.
翻译:编程微控制器涉及与同时和反应的硬件和外围设备进行低层次的互换。 此类程序通常使用同时语言扩展( 如 $\ textt{ FreetRTOS 任务} $ 和 $\ textt{ semapheres} $ 和 $\ textt{ semaphores} 来混合C和组装, 导致不安全、 反馈驱动、 容易出错和难以维护的功能语言代码。 我们通过引入 $\ textt{SenseVM} 来应对这一挑战。 这主要让程序员能够编译和调整自己的调制调制抽象数据, 此外, 将不安全的记忆操作转换为基于 $\ text{ 高序调调 $( 最初是由 Reppy 引入的) 模式, 用于微控制器列编程程序。 这个模式将同步操作作为头等值( $\ t{ Events} 类似处理一等函数的处理方法。 这让程序能够编程并调整自己的调制, 通过共同的纸质化的硬质文件操作器运行一个更安全, 。