  Observing, understanding, and mitigating the effects of failure in embedded
systems is essential for building dependable control systems. We develop a
software-based monitoring methodology to further this goal. This methodology
can be applied to any embedded system peripheral and allows the system to
operate normally while the monitoring software is running. We use software to
instrument the operating system kernel and record indicators of system
behavior. By comparing those indicators against baseline indicators of normal
system operation, faults can be detected and appropriate action can be taken.
  We implement this methodology to detect faults caused by electrostatic
discharge in a USB host controller. As indicators, we select specific control
registers that provide a manifestation of the internal execution of the host
controller. Analysis of the recorded register values reveals differences in
system execution when the system is subject to interference. %We also develop a
classifier capable of predicting whether or not the system's behavior is being
affected by such shocks. This improved understanding of system behavior may
lead to better hardware and software mitigation of electrostatic discharge and
assist in root-cause analysis and repair of failures.
