Resource constrained microcontrollers with as little as several hundred bytes of RAM and a few dozen megahertz of processing power are the most prevalent computing devices on earth. Microcontrollers and the many application components that interface to them, such as sensors, actuators, transceivers and displays are now cheap and readily available. Once costly development tools are now downloadable from the Internet and usable for free. Interest in application development using resource constrained microcontrollers has expanded beyond embedded system engineers to a broad audience of those that include artists, designers, students and product developers in all sectors of industry and fields of research.
Developing application software for resource constrained systems is a complex process. The lack of microcontroller resources preclude the use of modern high-level programming languages and operating systems. Modern development practices that support uniform software development across hardware platforms are virtually non-existent. Additionally, device manufacturers adhere to customer lock-in business practices making compatibility between vendor tools hard to come by and transitions between vendor technologies costly and time consuming.
The focus of this dissertation is to support the development of software for resource constrained microcontroller-based systems by an audience with a broad range of tech- nical skills. Our goal is to support uniform development for a diversity of application categories on heterogeneous hardware. Specifically, we design, implement and evaluate a new high-level programming language called Em with constructs and support for modularity, abstraction, software reuse, portability and reconfigurability for differing application requirements, hardware configurations, and quantities of runtime resources. For additional application development support we design, implement in Em, and eval- uate a hardware abstraction layer and model for runtime concurrency.
Our empirical results indicate that high-level language constructs can effectively be used in a resource constrained environment and achieve at least equivalent resource utilization compared to C and other related systems. We show through a demonstration and evaluation of real applications how we can support modern software development practices for authoring reusable, configurable, portable software for a diversity of hardware platforms. A hardware abstraction layer and a runtime model for concurrency provide additional support for development by, respectively, providing uniform inter- faces to hardware functionality and relieving developers from individually implementing concurrency mechanisms. Finally, we conduct a user study with university students showing how non-embedded systems experts and people with generally less technical expertise can successfully learn and develop non-trivial applications with Em.