Mikrocontroller stromsparend programmieren

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
Zeile 2: Zeile 2:
 
[[Category:Programmieren]]
 
[[Category:Programmieren]]
  
...kommt in Kürze!
+
'''...derzeit in Arbeit!'''
  
 +
=Motivation=
 +
Nicht erst seitdem der Begriffe [http://de.wikipedia.org/wiki/Green_IT „Green IT“] aktuell wurde, kümmern sich Hard­- und Softwareentwickler um die Minimierung des Energieverbrauchs ihrer Produk­te. Viele Einsatzszenarien erfordern den effizienten Umgang mit der zur Verfügung stehenden Energie. Geräte wie eine elektronische Armbanduhr oder Fernbedienung sollen nicht jeden Tag an ein Ladegerät angeschlossen werden. Ein Mobiltelefon soll in der Hosen­ oder Handtasche Platz finden. Unbemannte Messstationen, Signalbo­jen etc.  müssen  monatelang oder, im Extremfall, über Jahre permanent und war­tungsfrei funktionieren. Nicht immer steht eine Steckdose zur Stromversorgung in
 +
unmittelbarer Reichweite zur Verfügung.
 +
 +
Mit modernen Batterien und Akkumulatoren (Akkus), vielfach in Verbindung mit sogenannten [http://de.wikipedia.org/wiki/Energy_Harvesting „Energy Harvesting“-Energiequellen] (z.B. Photovoltaik), stehen Tech­nologien zur Verfügung, die die Konzeption und den Aufbau von platz­ und ge­wichtssparenden Geräten  ermöglichen.  Dabei  reicht  es  nicht  aus,  „Ultra­ Low Power“­Hardware nur einfach einzusetzen. Vielmehr muss auch die Firmware die zur Verfügung gestellten Möglichkeiten nutzen.
 +
 +
Der Autor betreibt eine [http://bralug.de/wiki/RFM12­Funkbrücke Außenstation] mit diversen Sensoren zur [http://bergeruw.dyndns.org/~bergeruw/temp/ Wetterbeobach­tung], welche drahtlos an eine [http://bralug.de/wiki/Wetterdaten_mit_Linux_aufzeichnen_und_verarbeiten Hauptstation] angebunden ist. Die Energieversorgung sollte dabei unabhängig von stationären Stromquellen gelöst werden. Um dies leis­ten zu können, setzte er sich mit den Begriffen „Ultra­low Power“ und „energieeffi­
 +
 +
 +
="Ultra Low Power"-Hardware=
 +
...
 +
 +
=Stromeffiziente Firmware entwickeln=
 +
Der überwiegende Teil, der durch eine MCU abzuarbeitenden Aufgaben lässt sich mit dem [http://de.wikipedia.org/wiki/EVA­-Prinzip EVA-­Prinzip] beschreiben. Es tritt ein Ereignis (Signal, Timer etc.) ein, auf welches der Prozessor entsprechend reagieren  muss (Daten ermitteln, Berechnun­gen etc.). Die Verarbeitung endet mit einer geeigneten Ausgabe des Ergebnisses. Eine ausreichend schnelle MCU vorausgesetzt, wird man feststellen, dass zwischen diesen „EVA­-Zyklen“ Wartezeiten entstehen. Der Prozessor und weitere nicht benö­tigte Peripherie kann abgeschaltet und damit in einen der zur Verfügung stehenden stromsparenden Zustände versetzt werden. Dies bedeutet, kurze Verarbeitungszei­ten innerhalb der MCU verlängert deren Wartezeiten und reduziert damit den Strombedarf des Gesamtsystems.
 +
 +
Für ihre [http://www.ti.com/tool/ccstudio Entwicklungsumgebung „Code Composer Studio“] bietet die Firma [http://www.ti.com/ Texas Instruments] das [http://processors.wiki.ti.com/index.php/ULP_Advisor Analysetool „ULPAdvisor“] an. Dieses Werkzeug ist auf die Ana­lyse von C-­Quelltexten für die hauseigene MCU­-Familie MSP430 zugeschnitten. Die zugrunde liegenden Kriterien sind aber ohne weiteres verallgemeinerbar und damit auch auf vergleichbare Hardwareprodukte anderer Hersteller anwendbar. Die fol­genden Empfehlungen beziehen sich deshalb auf die implementierten Analysekrite­rien des „ULPAdvisor“.
 +
 +
==Nutze die Stromspar­-Modi der MCU, wann immer es geht==
 +
...
 +
 +
==Verwende Interrupts statt „Flag­-Polling“==
 +
...
 +
 +
==Verwende Timer statt Pausenschleifen==
 +
...
 +
 +
==Vermeide Funktionsaufrufe innerhalb von Interrupt­-Routinen==
 +
...
 +
 +
==Vermeide rechenintensive Operationen==
 +
...
 +
 +
==Verwende, wenn vorhanden, DMA==
 +
...
 +
 +
==Benutze, wenn möglich, lokale statt globale Variablen==
 +
...
 +
 +
==Verwende „call by reference“ bei großen Variablen==
 +
...
 +
 +
==Verwende „const“ und „static“ bei Variablen­-Deklarationen==
 +
...
 +
 +
==Verwende keine vorzeichenbehafteten Variablen, wenn nicht erforderlich==
 +
...
 +
 +
==Verwende Bitmasken statt Bitfelder==
 +
...
 +
 +
==Zähle in bedingten Schleifen rückwärts statt vorwärts==
 +
...
 +
 +
=Wie lange reicht eine Batterie-Ladung?=
 +
...
  
 
=Kontakt=
 
=Kontakt=
 
[[Benutzer:bergeruw|Uwe]]
 
[[Benutzer:bergeruw|Uwe]]

Version vom 18. Januar 2014, 01:32 Uhr


...derzeit in Arbeit!

Inhaltsverzeichnis

Motivation

Nicht erst seitdem der Begriffe „Green IT“ aktuell wurde, kümmern sich Hard­- und Softwareentwickler um die Minimierung des Energieverbrauchs ihrer Produk­te. Viele Einsatzszenarien erfordern den effizienten Umgang mit der zur Verfügung stehenden Energie. Geräte wie eine elektronische Armbanduhr oder Fernbedienung sollen nicht jeden Tag an ein Ladegerät angeschlossen werden. Ein Mobiltelefon soll in der Hosen­ oder Handtasche Platz finden. Unbemannte Messstationen, Signalbo­jen etc. müssen monatelang oder, im Extremfall, über Jahre permanent und war­tungsfrei funktionieren. Nicht immer steht eine Steckdose zur Stromversorgung in unmittelbarer Reichweite zur Verfügung.

Mit modernen Batterien und Akkumulatoren (Akkus), vielfach in Verbindung mit sogenannten „Energy Harvesting“-Energiequellen (z.B. Photovoltaik), stehen Tech­nologien zur Verfügung, die die Konzeption und den Aufbau von platz­ und ge­wichtssparenden Geräten ermöglichen. Dabei reicht es nicht aus, „Ultra­ Low Power“­Hardware nur einfach einzusetzen. Vielmehr muss auch die Firmware die zur Verfügung gestellten Möglichkeiten nutzen.

Der Autor betreibt eine Außenstation mit diversen Sensoren zur Wetterbeobach­tung, welche drahtlos an eine Hauptstation angebunden ist. Die Energieversorgung sollte dabei unabhängig von stationären Stromquellen gelöst werden. Um dies leis­ten zu können, setzte er sich mit den Begriffen „Ultra­low Power“ und „energieeffi­


"Ultra Low Power"-Hardware

...

Stromeffiziente Firmware entwickeln

Der überwiegende Teil, der durch eine MCU abzuarbeitenden Aufgaben lässt sich mit dem EVA-­Prinzip beschreiben. Es tritt ein Ereignis (Signal, Timer etc.) ein, auf welches der Prozessor entsprechend reagieren muss (Daten ermitteln, Berechnun­gen etc.). Die Verarbeitung endet mit einer geeigneten Ausgabe des Ergebnisses. Eine ausreichend schnelle MCU vorausgesetzt, wird man feststellen, dass zwischen diesen „EVA­-Zyklen“ Wartezeiten entstehen. Der Prozessor und weitere nicht benö­tigte Peripherie kann abgeschaltet und damit in einen der zur Verfügung stehenden stromsparenden Zustände versetzt werden. Dies bedeutet, kurze Verarbeitungszei­ten innerhalb der MCU verlängert deren Wartezeiten und reduziert damit den Strombedarf des Gesamtsystems.

Für ihre Entwicklungsumgebung „Code Composer Studio“ bietet die Firma Texas Instruments das Analysetool „ULPAdvisor“ an. Dieses Werkzeug ist auf die Ana­lyse von C-­Quelltexten für die hauseigene MCU­-Familie MSP430 zugeschnitten. Die zugrunde liegenden Kriterien sind aber ohne weiteres verallgemeinerbar und damit auch auf vergleichbare Hardwareprodukte anderer Hersteller anwendbar. Die fol­genden Empfehlungen beziehen sich deshalb auf die implementierten Analysekrite­rien des „ULPAdvisor“.

Nutze die Stromspar­-Modi der MCU, wann immer es geht

...

Verwende Interrupts statt „Flag­-Polling“

...

Verwende Timer statt Pausenschleifen

...

Vermeide Funktionsaufrufe innerhalb von Interrupt­-Routinen

...

Vermeide rechenintensive Operationen

...

Verwende, wenn vorhanden, DMA

...

Benutze, wenn möglich, lokale statt globale Variablen

...

Verwende „call by reference“ bei großen Variablen

...

Verwende „const“ und „static“ bei Variablen­-Deklarationen

...

Verwende keine vorzeichenbehafteten Variablen, wenn nicht erforderlich

...

Verwende Bitmasken statt Bitfelder

...

Zähle in bedingten Schleifen rückwärts statt vorwärts

...

Wie lange reicht eine Batterie-Ladung?

...

Kontakt

Uwe

'Persönliche Werkzeuge