GGrantIndex
← Search

ITR: Advanced Programming Languages for Embedded Systems

$239,996FY2002CSENSF

Oregon Health & Science University, Portland OR

Investigators

Abstract

Mark P. Jones and Richard B. Kieburtz CCR-0205737 "Advanced Programming Languages for Embedded Systems" Over the last few decades we have witnessed remarkable changes in the way that computers are both used and programmed. For example, many of the computers in use today are hidden in embedded systems. From everyday appliances---such as washing machines and televisions---to safety and security critical systems---such as vehicle navigation and control, defense applications, or medical devices---the use of embedded computers allows manufacturers to build systems with much greater flexibility, functionality, and sophistication than has ever been possible before. During the same time, new programming languages have been developed with features that increase developer productivity and allow the construction of produce more reliable and flexible systems. For example, module systems help to manage the complexity of large projects, type systems can be used to detect bugs at compile-time, and automatic storage management techniques eliminate a common source of errors. In industry, however, much of the embedded software that is being developed today is still written using older languages, or lower-level assembly languages, without the benefits that modern languages can provide. The problem is that the results and focus of recent programming language research have not been a good match for the challenges and context of embedded systems development. As a result, where some might have expected embedded systems developers to embrace modern programming languages, it might seem instead that many have chosen to ignore them! One source of problems arises from difficulties in capturing so-called non-functional aspects of behavior---such as execution time, power consumption, and adaptivity---that are critical requirements for many embedded systems. Unfortunately, these are exactly the kinds of things that language designers have abstracted away from in the hope of increasing productivity and portability. Other difficulties occur as the result of complicated treatments of features such as concurrency and event handling, which again play a central role in many embedded applications. Significant bugs can occur if programmers do not adhere to a carefully worked out discipline of coding when they use such features, but there is very little that the underlying type system or semantics can do to help in detecting these problems. This project is working to bridge the gap between these two important fields, and to demonstrate how embedded systems development can benefit from and inform programming language research. In particular, the project is focusing on the ongoing development and use of a high-level language called Timber that supports an implicit notion of concurrency, asynchronous communication, and non-blocking, reactive programming. All of these features are directly relevant in the context of embedded systems design. In addition, the project is developing new analysis and compilation techniques that enable non-functional aspects of behavior to be specified using high-level constraints and policies for graceful degradation. Because they are specified at a high level, these constraints can continue to serve as meaningful descriptions of required behavior, even as programs evolve to accommodate new functionality or to support new platforms. The key to success is a declarative approach in which programmers focus on what is required, while compilers determine how it should be accomplished, using the results of analysis to guide the selection of an appropriate, low-level implementation strategy. With the transition from research to industry in mind, the project is focusing on tools for PC/104 systems, which is an industry standard and an important sector in today's embedded systems market. In the longer term, the project is contributing to shifts in attitude and beneficial changes in the role that programming language technology can plays in the delivery of more widespread, more flexible, more reliable, and more secure embedded systems.

View original record on NSF Award Search →