Es gibt viele Dinge im Bereich der Softwareentwicklung, die in kaum einem Fachbuch oder einer Lehrveranstaltung an der Uni, diskutiert werden. Eines dieser Probleme ist das Auswuchten von Software.

Programme und Daten werden bekanntlich digital, also mit 1 & 0 kodiert, gespeichert. Das Problem daran ist, dass die 1 und die 0 unterschiedlich schwer sind. Für viele Anwendungen ist das kein Problem, weil z.B. in Festplatten entsprechende Algrorithmen eingebaut sind, die für eine gleichmäßige Verteilung der 1 und 0 sorgen. Wäre das nicht der Fall, würden sich die meisten Festplatten wahrscheinlich bereits nach kurzer Betriebsdauer durch die Vibrationen, die durch die ungleichmäßige Verteilung der Daten ausgelöst wird, zerstören.

In vielen Embedded Anwendungen werden statt Festplatten Flashmemorys als Programm- und Datenspeicher eingesetzt. Bei diesem Speichertyp werden die Daten nicht auf einem rotierenden Medium abgelegt, sondern in Halbleiterstrukturen. Durch das unterschiedliche Gewicht der 1 und der 0 kann es bei diesem Speicher durch Vibrationen und eine ungünstige Einbaulage dazukommen, das die Daten verrutschen bzw. sich entmischen. In diesem Fall sammeln sich im oberen Bereich des Speichers die leichteren Einsen und im unteren Bereich die schweren Nullen. Es ist leicht nachzuvollziehen, dass die entsprechenden Programme dadurch nicht mehr fehlerfrei arbeiten und abstürzen.

Leider ist in Flashspeichern kein automatischer Algorithmus eingebaut, der die Daten/Programme rüttelfest im Programmspeicher anordnet. Deshalb ist es eine der wichtigen Aufgaben des Embedded Software Programmierers durch geschickte Kombination der Instruktionen eine möglichst stabile Struktur von Einsen und Nullen zu erzeugen. Ein alter aber sehr wirkungsvoller Trick ist es z.B. NOP-Befehle einzuschieben. Der NOP-Befehl (NoOperation) wird im Prozessor eigentlich immer mit 0xFF => b11111111 kodiert. Entsprechend wird mit diesem Befehl eine stabile Schicht Einsen in den Speicher geschrieben, die nur schwer von den Nullen durchquert werden kann.

Leider sind die oben beschriebenen Probleme und Lösungen in der Praxis nicht sehr bekannt. So passiert es heute selbst großen Firmen, das sie mit diesem Fehler kämpfen, wie man z.B. in einem Artikel von 6.11.2010 im Weser Kurier lesen konnte:

Artikel

Leider wurde in diesem Artikel nicht erwähnt, dass die Fahrzeugbesitzer zur Soforthilfe auch einfach das entsprechende Steuergerät in eine horizontale Lage bringen können. Dazu kann er entweder nur auf den zwei Reifen der Beifahrerseite fahren oder das Steuergerät abschrauben, drehen und in horzontaler Lage mit Kaugummi befestigen.

p.s. Nie alles glauben, was im Internet steht... :-)