Power Debugging

Visualisierung des Energieverbrauchs von Embedded Systemen

Seite: 2/3

Anbieter zum Thema

In der Praxis und in einem Task-orientierten System ist es meist interessanter zu sehen, wie eine bestimmte Funktion die Leistungsaufnahme beeinflusst, als für jede einzelne Anweisung die Änderung der Leistungsaufnahme zu analysieren. Der Funktions-Profiler hilft, für einen bestimmten Auslöser die Funktionen zu finden, deren Ausführung am längsten dauert. So lassen sich die Bereiche der Anwendung identifizieren, in denen sich die Energieverbrauchsoptimierung lohnt.

Auf einem System mit Cortex M-3 kann der Debugger dazu die Befehlszählerablesung des DWT-Moduls nutzen. Der Profiler findet die Funktion, die einem Wert des Program Counters entspricht und baut eine interne Datenbank auf, in der hinterlegt ist, wie oft die Funktionen ausgeführt werden. So entsteht ein Funktionsprofil. Die Profilinformationen jeder Funktion der Anwendung werden im Debugger angezeigt, während die Anwendung abläuft.

Bei der Leistungsanalyse werden die Funktionsprofile mit den Leistungsmessungen verknüpft. So lässt sich die Leistungsaufnahme pro Funktion berechnen und im Funktions-Profiler-Fenster darstellen.

Das Funktions-Profiler-Fenster zeigt die Anzahl der Messwerte pro Funktion sowie Minimal-, Mittel- und Maximalwert. Auch hier lassen sich sehr bequem Spitzen in der Stromaufnahme und unerwartetes Verhalten finden, wenn es darum geht, den Leistungsverbrauch eines Embedded Systems zu analysieren. Ein System kann voll funktionsfähig sein und sich in den Tests wie erwartet verhalten – und trotzdem kann der Stromverbrauch viel zu hoch sein. IAR C-SPY bietet mit dem Funktions-Profiler eine Möglichkeit, genau dies zu analysieren.

Optimierung des Codes für geringe Stromaufnahme

Grundsätzlich ähnelt die Optimierung für eine geringe Stromaufnahme der Optimierung auf Geschwindigkeit. Je schneller eine Aufgabe abgearbeitet wird, desto mehr Zeit kann im Stromsparmodus verbracht werden.

Die folgenden Beispiele zeigen, wie schwierig es sein kann, unnötig Energie verbrauchende Abläufe zu identifizieren. Meist geht es nicht um explizite Fehler im Quellcode, sondern um die Art, wie die Hardware angesprochen wird. Andererseits geht es manchmal eben doch um echte Bugs. Ein typischer Fehler, der hohen Energieverbrauch erzeugt, ist das Nutzen einer Schleifenkonstruktion, die z. B. die Statusänderung einer Peripherieeinheit abwartet.

Code-Konstrukte wie die folgenden laufen so lange ohne Unterbrechung, bis sich der Status auf den gewünschten Wert ändert:

while (USBD_GetState() < USBD_STATE_CONFIGURED);

while ((BASE_PMC->PMC_SR & MC_MCKRDY) != PMC_MCKRDY);

Eine verwandtes Konstrukt ist die Implementierung einer Verzögerung über for oder while wie im folgenden Beispiel. Bei einer solchen Konstruktion führt die CPU Befehle aus, die nur Zeit verbrauchen:

i = 10000; // SW-Verzögerung

do i--;

while (i != 0);

In beiden Situationen lässt sich der Code so optimieren, dass der Stromverbrauch sinkt. Zeitverzögerungen lassen sich beispielsweise über die Nutzung eines Hardware-Timers besser implementieren. Der Timer wird gestartet und danach geht die CPU in den Stromsparmodus, bis sie vom Interrupt wieder geweckt wird. Auch die Abfrage eines Einheitenstatus lässt sich über Interrupts lösen oder durch die Nutzung eines Timer-Interrupts, so dass die CPU zwischen den Abfragen „schlafen“ kann. Je nach Charakteristik des Embedded Systems kann es schwierig sein, diese Konstruktionen per Power Debugging zu finden. Eine Lösung kann es sein, die diversen Power Debugging-Fenster zu nutzen, um das Leistungsprofil der Anwendung kennenzulernen und unnormales Verhalten einfacher zu identifizieren.

Vorteile von DMA gegenüber dem I/O-Polling ermitteln

DMA (Direct Memory Access) wird dazu genutzt, um die Datenübertragung zu beschleunigen. In der Welt der Mikrocontroller haben die Hersteller eine unüberschaubare Anzahl von DMA-Techniken entwickelt, um Flexibilität und Geschwindigkeit zu erhöhen und die Leistungsaufnahme zu verringern. Manche Architekturen können sogar die CPU während DMA-Übertragungen in den Schlafmodus versetzen. Power Debugging ermöglicht es dem Entwickler, mit diesen DMA-Technologien zu experimentieren und im Debugger direkt zu sehen, welche Vorteile diese Technologien im Vergleich zu CPU-getriebenem Polling bieten.

Viele Embedded Systeme verbringen die meiste Zeit mit Warten. Läuft der Prozessor während des Wartens mit vollem Takt, wird Batteriekapazität verbraucht, ohne dass Arbeit verrichtet wird. Deshalb ist der Prozessor in vielen Systemen nur während sehr kurzer Zeitspannen aktiv. Versetzt man den Prozessor in einen Stromsparmodus, lässt sich die Batterielebenszeit extrem verlängern.

Eine gute Basis ist die Verwendung eines taskorientierten Designs und eines Echtzeitbetriebssystems: In einem taskorientierten System lässt sich ein Task mit niedrigster Priorität definieren, der nur läuft, wenn kein anderer Task Rechenzeit beansprucht. Dieser Idle-Task ist ideal geeignet, um ein Powermanagement zu implementieren. In der Praxis versetzt der Idle-Task, sobald er läuft, den Prozessor in einen Stromsparmodus.

Die Stromsparmodi der CPU verstehen lernen

Viele Mikroprozessoren und andere Chips haben eine Reihe von Stromsparmodi, in denen bestimmte, nicht benötigte Teile des Prozessors abgeschaltet werden. Der Taktgeber kann abgeschaltet oder auf eine niedrigere Frequenz geschaltet, Peripherieeinheiten stillgelegt und Timer angehalten werden; die CPU lässt sich sogar komplett anhalten. Die diversen Stromsparmodi benötigen unterschiedlich viel Energie, je nachdem, welche Einheiten noch laufen.

Ein Power Debugging-Werkzeug kann bei der Untersuchung der Stromsparmodi sehr nützlich sein. Der Funktions-Profiler lässt sich nutzen, um den Stromverbrauch des Tasks oder der Funktion, die das System in den Stromsparmodus versetzt, bei verschiedenen Modi zu analysieren. Sowohl der Mittelwert als auch der Absolutwert des Stromverbrauchs sind bei diesen Vergleichen nützliche Informationen.

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

(ID:39444320)