Future embedded systems will be based on semiconductor devices featuring smaller structure sizes as well as reduced operating voltages. These reductions will lead to an increase in the number of transient errors in memory devices as well as logic components.
This implies a serious dilemma for every embedded systems developer — to correct these errors, additional amounts of the scarce resources processing power, memory and energy are required. When real-time behavior is mandatory, correcting every single error makes it extremely hard to ensure timing properties of a system.
In order to increase the predictability of such a system, a different approach to handling errors is needed. In fact, some types of errors, like a flipped bit in video RAM, can safely be ignored in some applications, the processing of certain other errors may be delayed in order to adhere to given real-time constraints, whereas some errors have to be handled immediately.
We assume that, in the general case, not all errors can be dealt with in hardware and that errors will, with some hopefully small probability, be propagated to software. Therefore, we propose a software-based approach to a more flexible error handling and correction of errors reaching the software level. The system will use application knowledge to control error handling according to the current context of program execution and timing constraints. This is achieved by a combination of compiler-driven transformations and adaptive error handling routines in an embedded operating system. Additionally, the processing power of multicore systems can be employed for more efficient approaches to correct or accept transient errors. Based on an architecture of memories with different grades of reliability, the system will also permit allocation of such memory resources according to application requirements.