Approximately 3 billion embedded CPUs are sold each year, with smaller (4-, 8-, and 16-bit) CPUs dominating by quantity and aggregate dollar amount. Yet, most research and tool development seems to be focused on the needs of high-end desktop and military/aerospace embedded computing. This article seeks to expand the area of discussion to encompass a wide range of
Embedded Systems
.The extreme diversity of embedded applications makes generalizations difficult. Nonetheless, there is emerging interest in the entire range of Embedded systems and the related field of hardware/software co-design.
This article seeks to identify significant areas in which embedded computer design differs from more traditional desktop computer design. They also present "design challenges" encountered in the course of designing several real systems. These challenges are both opportunities to improve methodology and tool support as well as impediments to deploying such support to embedded system design teams. In some cases research and development has already begun in these areas -- and in other cases it has not.
The observations in this article come from the author's experience with Embedded systems in commercial as well as military applications, development methodologies, and life-cycle support. All characterizations are implicitly qualified to indicate a typical, representative, or perhaps simply an anecdotal case rather than a definitive statement about all embedded systems. While it is understood that each embedded system has its own set of unique requirements, it is hoped in Embedded systems that the generalizations and examples presented here will provide a broad-brush basis for discussion and evolution of CAD tools and design methodologies.
If you code for an embedded system, optimization and debugging are essential to keeping your applications running efficiently. Here is a tip on adding a code profiler.