Leistung und Zuverlässigkeit Hard- und Softwareaspekte für optimierte Embedded Systeme

Kei Thomsen *

Anbieter zum Thema

So lässt sich durch die Wahl der richtigen, ECC-geeigneten Prozessoren und Speicher die Systemsicherheit im Embedded-Bereich deutlich steigern.

Embedded System: Nicht nur auf die Auswahl eines passenden Prozessors oder Speicherbausteins kommt es an. Unsauberer, schlecht strukturierter Code kann eine IoT-Anwendung enorm verlangsamen - teilweise sogar um den Faktor 30.
Embedded System: Nicht nur auf die Auswahl eines passenden Prozessors oder Speicherbausteins kommt es an. Unsauberer, schlecht strukturierter Code kann eine IoT-Anwendung enorm verlangsamen - teilweise sogar um den Faktor 30.
(Bild: Microsys)

Mit hochintegrierten und leistungsfähigen System on Chip Lösungen wandert zunehmend Intelligenz bis auf die Sensorebene von komplexen embedded Anwendungen. Wie Zuverlässigkeit im Design auch bei kleinen Systemstrukturen zu erreichen ist, gepaart mit hoher Performance und geringer Leistungsaufnahme, ist nach wie vor eine wichtige Kompetenz modernen Systemengineerings.

Im nachfolgenden Artikel werden gleich schnell getaktete ARM-, PowerPC- und X86- Plattformen bezüglich Gesamtperformance und Systemsicherheit (Safety) verglichen. Anhand zweier C-Code Anwendungsbeispiele, die in erster Betrachtung fast identisch aufgebaut sind, wird erklärt, wie mit durchdachter Programmierung Leistungssteigerungen bis zu Faktor 30 möglich sind.

Im zweiten Teil des Beitrags wird die Wichtigkeit von ECC-Memory (Error Correcting Code) und Prozessorunterstützung durch die immer kleiner werdenden Chip-Strukturen erläutert. Darüber hinaus gibt es neue Erkenntnisse zum Thema NAND-Flash-Speicher. Hier werden Methoden wie z.B. das Scrubbing bei NAND Flashes erklärt.

CPU-Plattformenvergleich hinsichtlich Systemleistung

Es gibt immer wieder Streit darüber, welches der performantere und bessere Prozessor für eine gegebene Anwendung ist. Meist stehen hier X86, PowerPC und ARM in ihren unterschiedlichen Ausprägungen gegeneinander.

Eins vorweg: Gleich schnell getaktete Prozessoren sind auch in etwa gleich schnell, mit wenigen Prozentpunkten Abweichung. Da ein Großteil der lokalen Daten im CPU-Cache verarbeitet werden, sind hier kaum Unterschiede sichtbar. Sobald es aber ins externe RAM geht, kommen Faktoren wie Busbreite, Speichertyp und Cache-RAM-Verbindung mit ins Spiel.

Gute und schlechte Programmierung für Speicherzugriffe

Beispielfunktionen: Auch wenn C-Source-Code-Beispiel 1 (links) und Beispiel 2 (rechts) nahezu identisch sind, liefern sie bei der Ausführung höchst unterschiedliche Resultate.
Beispielfunktionen: Auch wenn C-Source-Code-Beispiel 1 (links) und Beispiel 2 (rechts) nahezu identisch sind, liefern sie bei der Ausführung höchst unterschiedliche Resultate.
(Bild: Microsys)

Doch zunächst zu dem C-Code Beispiel, mit dem die Messung durchgeführt wurden. Weshalb gibt es „gute“ und „schlechte“ Programmierung?

Häufig wird einfach darauf los programmiert, auf die pure Umsetzung einer Funktion geachtet und nicht die Auswirkungen der Programmierverfahren auf die Systemleistung miteinbezogen. Mit der Berücksichtigung der Abläufe, wie der Prozessor mit dem Cache und RAM zusammenarbeitet, können beispielsweise speicherintensive Funktionen um Faktoren schneller ablaufen.

Als Beispiel werden hier zwei fast gleiche Funktionen in C verglichen (siehe Abbildung). Es soll hierbei nicht auf Funktion, ANSI Konformität oder Schönheit ankommen, sondern es wird nur der Algorithmus beschrieben.

Artikelfiles und Artikellinks

(ID:44498621)

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung