@techreport{ball2023jacdac, author = {Ball, Thomas and de Halleux, Peli and Devine, James and Hodges, Steve and Moskal, Michal}, title = {Jacdac: Service-based Prototyping of Embedded Systems}, institution = {Microsoft}, year = {2023}, month = {January}, abstract = {   The traditional approach to programming embedded systems is monolithic: firmware on a microcontroller contains both application code and the drivers needed to communicate with sensors and actuators, using low-level protocols such as I2C, SPI and RS232. In comparison, software development for the cloud has moved to a service-based development and operation paradigm: a service provides a discrete unit of functionality that can be accessed remotely by an application program, or other service, but independently managed and updated.    We propose, design, implement and evaluate a service-based approach to prototyping embedded systems called Jacdac. With Jacdac, each sensor/actuator in a system is paired with a low-cost microcontroller that advertises the services that represent the functionality of the underlying hardware over an efficient and low-cost wire protocol (bus). A separate microcontroller executes the user's application program, which is a client of the Jacdac services on the bus.    Our evaluation shows that Jacdac supports a service-based abstraction for sensors/actuators at low cost and reasonable performance, with many benefits for prototyping: ease of use via the automated discovery of devices and their capabilities, substitution of same-service devices for each other, as well as high-level programming, monitoring, and debugging. We also report on the experience of bringing Jacdac to commercial availability via a third-party manufacturer.}, url = {http://approjects.co.za/?big=en-us/research/publication/jacdac-service-based-prototyping-of-embedded-systems/}, number = {MSR-TR-2023-4}, }