Types of Software by Focus

Typical embedded systems are reactive in nature. Such software runs continuously, responding to events as they ocurr, adjusting their outputs accordingly. Given a well defined set of events, such systems are well suited to implementation as finite state machines. Finite state machines enable designers to specify behavior unambiguously, resulting in behavior that is predictable and verifiable.

Unfortunately, designers often make mistakes in their analysis and fail to properly identify the different events as such. The most common mistake is confusing the event with the synchronization mechanism. For example, an interrupt may indicate that a change has ocurred in one of the bits in a single status register. It is common for the designer to treat this as a single event, when in fact there may be one event for each bit in the status register.

A notification is an autonomously issued event from a lower layer subsystem. The taxonomy that follows is an analysis of the different kinds of events that may be encountered.

Event Taxonomy

Events ocurr asynchronously with respect to other software activity. Before it is possible to react to an event, the control program must first detect the event. Note that there is a distinction between the event detection, and the behavior that ensues in response to the event. Therefore, it is necessary to synchronize the event ocurrence with the program responsible for reacting to the event. One approach is to periodically poll the event status unti a change ocurrs. While this technique is quite popular and simple to implement, it is neither efficient in terms of processor and bus utilization, nor does it scale well. This is especially important at a time when embedded systems are evolving from the relatively low feature set with limited functionality towards systems that are quite complex.

Thus the need for a more careful analysis and the development of techniques that improve the overall efficiency, scaleability and maintainability of these increasingly complex systems.

Handling Asynchronous Inputs