Modern embedded systems (i.e. highly resource-constrained, micro-controller-based devices) are increasingly available at very low cost and consist of a variety of hardware components. As a result, these systems have become increasingly ubiquitous and are emerging as an important computing platform. Advances in support for easy program development across heterogeneous devices, by a broad developer base (with a range of expertise and backgrounds) for such devices is vital, but unfortunately has not kept pace. Currently, only very skilled developers are able to develop even simple applications or extant software development frameworks only support a small set of similar devices or a particular application domain.
Toward this end, we present a new programming language, called Em, for the development of highly resource-constrained device applications. Em is an extension to the C language that integrates high-level language and software engineering features that include modularity, encapsulation and data hiding, interface separation from implementation, inheritance, support for key design patterns, and reduced syntax verbosity, among others. Em facilitates code reuse, portability across platforms and device components, interchangeability (substitutability) while still achieving the footprint and code efficiency of C. Em also integrates novel features such as unifying the configuration (build time execution) and target (run time execution) code development. We demonstrate the efficacy of Em using multiple embedded systems building blocks and applications.