Energie sparen bei eingebetteter Software

Energiesparen ist nicht erst seit der CO2-Diskussion gefragt. Denn bei mobilen, batteriebetriebenen Geräten ist Energie nicht nur extrem teuer, ein hoher Energieverbrauch schränkt auch die Unabhängigkeit ein, wenn das Gerät bald wieder ans Ladekabel muss. Jetzt gibt es ein neues Messverfahren, mit dem Code-Abschnitte aufgedeckt werden können, die einen hohen Stromverbrauch verursachen.

Energiesparen ist nicht erst seit der CO2-Diskussion gefragt. Denn bei mobilen, batteriebetriebenen Geräten ist Energie nicht nur extrem teuer, ein hoher Energieverbrauch schränkt auch die Unabhängigkeit ein, wenn das Gerät bald wieder ans Ladekabel muss. Jetzt gibt es ein neues Messverfahren, mit dem Code-Abschnitte aufgedeckt werden können, die einen hohen Stromverbrauch verursachen.

Welchen Einfluss hat eine Programmänderung auf den Energiebedarf einer Applikation? Welcher Programmteil verursacht den größten Energieverbrauch? Bei der Entwicklung von batteriebetriebenen Geräten wie Mobiltelefonen kommt diesen Fragen elementare Bedeutung zu. War es bisher sehr aufwendig, wenn nicht unmöglich, Strommessungen bestimmten Programmstellen zuzuordnen, so wird es mit der hier vorgestellten Mess-Anordnung zum Kinderspiel. Der Entwicklung energieoptimierter Software steht damit nichts mehr im Wege. Kenndaten wie Stand-by-Zeit oder Betriebszeit können entscheidend für den Erfolg eines Produktes sein. Aus diesem Grund werden heute beim Design batteriebetriebener Geräte umfassende Maßnahmen zur Reduktion des Energieverbrauchs ergriffen. Typische Maßnahmen sind:

  • Einsatz stromsparender Bauteile mit Energiesparmodi,
  • hoher Integrationsgrad,
  • Variation der CPU-Frequenz,
  • Variation der Versorgungsspannung,
  • Einsatz von Mikrocontrollern mit Energiespar-Features, Cache und On-Chip-Speicher.

Eine optimale Reduktion des Energieverbrauchs kann allerdings nur dann gelingen, wenn die Software, die das Gerät steuert, alle Sparmöglichkeiten der Hardware konsequent ausnutzt. Die Energie ist das Produkt aus Strom, Spannung und Zeit. Jeder dieser Parameter kann durch die Steuer-Software beeinflusst werden. Während des Entwicklungsprozesses muss deshalb immer wieder untersucht werden, ob die drei Parameter abhängig vom Betriebsmodus der Anwendung optimal aufeinander abgestimmt sind. Es gilt beispielsweise zu überprüfen:

  • ob der Mikrocontroller im richtigen Energiesparmodus ist,
  • wie sich Programmänderungen auf den Stromverbrauch auswirken,
  • ob unerwartete Stromspitzen auftreten.

Eine solche Überprüfung erfordert eine Mess-Anordnung, die neben dem Programm- und Datenfluss der Steuer- Software zeitgleich den Strom- und Spannungsverlauf misst, aufzeichnet und anschließend auf einfache Weise zueinander in Bezug bringt. Damit der Energieverbrauch für jeden Punkt des Programms bestimmt werden kann, müssen folgende Messdaten erfasst werden:

  • Der zeitliche Programmablauf der Steuer-Software. Dazu wird heute üblicherweise ein Debugger mit Echtzeit-Trace-Funktion verwendet.
  • Der Strom- und der Spannungsverlauf während der Programmlaufzeit. Als Messgerät bietet sich hier ein Logikanalysator mit einer Analog-/ Digital-Probe an.

Die eigentliche Herausforderung besteht darin, die Messung des Programmflusses mit der Messung von Strom und Spannung zu korrelieren. Beim Einsatz nichtintegrierter Mess-Hardware, z.B. Einzelgeräte unterschiedlicher Hersteller, bedeutet dies erheblichen Aufwand – oft ist es sogar unmöglich. Ebenso sind Analyse und statistische Auswertung schwierig und wenig komfortabel.

Bei der integrierten Mess-Anordnung von Lauterbach, bestehend aus Debugger, Echtzeit-Trace und Logikanalysator, ist jedes dieser Geräte mit einem Zeitzähler ausgestattet. Zu Beginn der Messung werden diese Zeitzähler synchronisiert. Jede einzelne Aufzeichnung wird mit einem Zeitstempel versehen und kann deshalb mit den Aufzeichnungen der jeweils anderen Messgeräte korreliert werden. Damit lässt sich exakt darstellen, wie viel Leistung zu einem bestimmten Zeitpunkt der Programmausführung von der Applikation verbraucht wurde. Zur Ermittlung des Programmablaufes kommt ein Echtzeit- Trace zum Einsatz, der zum Beispiel das ETM- oder Nexus- Trace-Protokoll aufzeichnet.

Zur Ermittlung des Strom- und Spannungsverlaufes kommt ein Logikanalysator mit Analog-Probe zum Einsatz. Damit werden bis zu drei Strom- und bis zu vier Spannungskanäle in Echtzeit gemessen. Des weiteren kann in Echtzeit auf Spannungs-, Stromund Leistungswerte getriggert werden. Für die Strommessung muss in der Versorgungsleitung der Applikation ein Shunt-Widerstand vorgesehen werden. Die über diesen Widerstand abfallende Spannung wird von der Analog- Probe gemessen. Dabei ist die gemessene Spannung abhängig vom Widerstandswert und proportional zum Strom. Diese Messmethode ist sehr verbreitet und wird von vielen Evaluierungs- Schaltungen unterstützt.

Strom- und Spannungskanäle sowie die Werte der Shunt-Widerstände werden in einem Eingabefenster aktiviert (Bild 1). Gleiches gilt für die Leistungskanäle, deren Berechnung aus dem gemessenen Strom und der gemessenen Spannung erfolgt. Alternativ kann auch eine feste Spannung für die Berechnung angegeben werden. Strom und Spannung lassen sich ebenso wie die daraus berechnete Leistung als zeitabhängige Kurven oder Tabellen darstellen. Alle zeitabhängigen Darstellungen (Programmfluss, Chart, Strom, Spannung, Leistung) werden durch die Track-Funktion synchronisiert. Bei einem Maus-Klick in eines der Fenster werden alle anderen Darstellungen automatisch nachgeführt. Durch diese enge Kopplung lassen sich die Ursachen einer hohen Leistungsaufnahme schnell der entsprechenden Programmstelle zuordnen.

Im gezeigten Beispiel (Bild 2) werden nacheinander acht Leuchtdioden eingeschaltet und anschließend wird eine Sinusspannung erzeugt. In der Strom-Zeit-Kurve (1) ist der treppen

förmig ansteigende Stromverbrauch dargestellt. Die Sinusspannung ist in der Spannungs-Zeit-Kurve (2) zu erkennen. In der Strom- (1), Spannungs- (2) und Chart-Darstellung (3) ist die Funktion „LED3_on“ durch die senkrechte, schwarze Track-Linie markiert. Im „Trace.List“-Fenster (4) ist die entsprechende Programmzeile durch einen blauen Balken gekennzeichnet.

Statistische Auswertungen werden nach jedem Programmstop automatisch ausgeführt. Sie liefern Informationen über Minimal-, Maximal- und Mittelwert des Energieverbrauchs der ausgeführten Funktionen (Bild 3). Ebenso wird für jede Funktion der absolute und der prozentuale Anteil am Gesamt-Energieverbrauch ermittelt. Energiehungrige Programmteile sind damit sehr leicht zu erkennen. In ihnen steckt das größte Potential zur Energieeinsparung. Die statistische Auswertung zeigt den Energieverbrauch der einzelnen Funktionen. Im Balkendiagramm (5) ist zu erkennen, dass die Funktion „LED8_on“ (alle LEDs an) den höchsten Energieverbrauch hat.

Als weitere Funktion steht eine Trigger-Einheit zur Verfügung. Durch die Angabe von Grenzwerten oder Bereichen für Strom, Spannung und Leistung werden Trigger-Ereignisse definiert. Deren Auftreten nutzt die Trigger- Einheit dazu, die Aufzeichnung gezielt ein- und auszuschalten (selektiver Trace). Alternativ kann auch ein Trigger-Signal erzeugt werden, das die Programmausführung stoppt.

Die integrierte Mess-Anordnung für die Energieanalyse eröffnet dem Entwickler eine einfache und schnelle Möglichkeit, Zusammenhänge zwischen einzelnen Programmpunkten und der zugehörigen Strom- bzw. Leistungsaufnahme zu erkennen. Durch die einfache Handhabung der Mess- Anordnung und die Integration in eine bekannte Debug-Bedienoberfläche ist Energieanalyse ab sofort nicht mehr nur ein Thema für Spezialisten. Jedem Entwickler ist es damit möglich, effektiv den Energiebedarf einer Applikation zu optimieren. Joachim Kroll