An embedded system is a special-purpose system that performs predefined tasks, usually with very specific requirements. Since the system is dedicated to a specific task, design engineers can optimize it by exploiting very specialized knowledge, deriving an optimally customized system. Low energy consumption and high performance are both valid optimization targets to increase the value and mobility of the final system. Traditionally, conceptual embedded software models are built irrespectively of the underlying hardware platform, whereas embedded-system specialists typically start their optimization crusade from the executable code. This practice results in suboptimal implementations on the embedded platform because at the source-code level not all the inefficiencies introduced at the modelling level can be removed. In this book chapter, we describe both novel UML transformations at the modelling level and C/C++ transformations at the software implementation level. The transformations at both design abstraction levels target the data types of dynamic embedded software applications and provide optimizations guided by the relevant cost factors. Using a real life case study, we show how our transformations result in significant improvement in memory footprint, performance and energy consumption with respect to the initial implementation. Moreover, thanks to our holistic approach, we are able to identify new and non-trivial solutions that could hardly be found with the traditional design methods.
TopIntroduction
Modern embedded systems are a combination of software and hardware, which perform a single or a few dedicated functions. In the context of this chapter, we will focus on embedded systems that perform more than one function and more specifically on the category of nomadic embedded systems. These are mobile devices that have multimedia or wireless communication functionality (or both) and provide to the end user the ease of rich multimedia content anytime, anywhere. To provide this functionality, they rely on hardware platforms, which integrate a number of processing elements, communication infrastructure and memory hierarchy on a single chip (or multiple chips on a board). The processing elements are programmable, which means that they can perform more than one function according to the embedded software that accompanies those (Catthoor & Brockmeyer, 2000). We classify embedded software as application software and system software, as can be seen in Figure 1. Application software performs some tasks relevant to the end user and the system software interfaces with hardware to provide the necessary services for application software. The embedded system designers are responsible for the design, integration and optimization of the hardware, application software and system software components.
Figure 1. Hardware and software components in an embedded system
In embedded systems, the software is gaining an ever increasing importance. Because hardware becomes more programmable, multiple applications can run on the same hardware platform through dedicated software. In this context, we define as embedded software applications the different programs, which are written for each one of these applications (from now on, we will simply refer to them as applications in the text). It is important to note that applications receive input from and serve directly to the end user of the embedded system. This means that the actions of the user have significant impact on the control flow of the algorithms in the applications, thus making the execution dynamic and event-driven.
The proposed optimization methodology is part of a general design flow. This flow targets a very broad application domain, thus not all of its (sub) steps are important for every type of design. In fact, it represents a meta flow (Figure 2 (Catthoor F, de Greef, Wuytack, 1998)) which is to be instantiated by omitting those (sub) steps which are irrelevant from the viewpoint of the specific type of application to be designed. Moreover, depending on the type of application domain which is considered, a specific step in the generic but abstract metaflow will be instantiated in a partly different way. The strict separation between different abstraction layers allows the designer to deal with the issues on each level more clearly and in a more decoupled fashion, and provides feedback as early as possible, avoiding large scope iterations through the entire design process. As seen in Figure 3, we illustrate an instance of the metaflow focusing on the higher abstraction level design stages for dynamic software applications.
Figure 2. Proposed optimization methodology in the general design flow (seen as part of the metaflow) (Catthoor & Brockmeyer, 2000)
Figure 3. (a) Introducing the ADT modeling level in the design process and (b) the need for an ADT-specific modeling language