Ich muss mich für einen Weg entscheiden, die Effizienz eines Algorithmus zu messen, der auf einem Mikrocontroller/Mikroprozessor läuft.
Mein Gedanke ist, dass ich die Laufzeit des Algorithmus verwenden kann, um eine bestimmte Aufgabe als indirektes Maß dafür zu verwenden, wie der Stromverbrauch dieses Algorithmus im Vergleich zum Stromverbrauch eines anderen Algorithmus abschneidet. Dies wäre jedoch nur sinnvoll, wenn die Betriebszeit des Mikrocontrollers in direktem Zusammenhang mit seiner Leistungsaufnahme steht. Ist diese Annahme wahr?
Der Mikrocontroller läuft unter exakt denselben Bedingungen mit jedem Algorithmus, derselben Peripherie usw.
Es gibt viele Dinge, die den Stromverbrauch des Geräts ändern, aber vorausgesetzt, Sie berechnen nur einen Algorithmus, bei dem alle nicht verwendeten Peripheriegeräte abgeschaltet werden, z deaktiviert (läuft eine Uhr und löst einen Interrupt aus),
Dann ja, je länger die Berechnung dauert, desto mehr Strom hat es verbraucht, es gibt einen Kompromiss zwischen Taktgeschwindigkeit und Gesamtstromverbrauch (denn die meisten Geräte, die in kürzester Zeit mit der höchsten Taktgeschwindigkeit laufen, verbrauchen weniger Energie als eine langsamere Uhr längere Zeit) aber wieder unter der Annahme, dass alles gleich bleibt, längere Zeit = mehr Leistung
Wenn Sie anfangen möchten, andere Peripheriegeräte einzubeziehen, finden Sie am Ende des Datenblatts für Ihr Gerät Diagramm für Diagramm für Diagramm, das den Stromverbrauch für Ihren speziellen Anwendungsfall und verschiedene andere Beziehungen umreißt, z. B. wenn Sie den Pin-Pullup haben eingeschaltet, wie lange das Schalten dieses Pins auf Low den Verbrauch erhöht. Wenn Sie etwas anderes im Signal ansteuern, wird es sowohl im High- als auch im Low-Zustand etwas verbrauchen. Wenn Sie ADCs verwenden, haben die Eingangspuffer abhängig davon eine nicht lineare Stromaufnahme auf die Eingangsspannung. (normalerweise würden Sie sie deaktivieren)
Steht der Stromverbrauch des Mikrocontrollers in direktem Zusammenhang mit seiner Betriebszeit?
So'ne Art. Was am meisten Strom verbraucht, ist der CPU-Takt und alle aktiven Hardware-Peripheriegeräte wie GPIO. Hardware-Peripheriegeräte sind eine eigene Geschichte, da jedes einzelne einzigartige Stromverbrauchseigenschaften aufweist.
Es besteht natürlich ein direkter Zusammenhang zwischen den benötigten CPU-Taktzyklen und der Länge des ausgeführten Maschinencodes, also gibt es auch einen Zusammenhang zwischen CPU-Taktzyklen und Stromverbrauch.
Dies ist vorausgesetzt, dass Sie Schlafmodi verwenden, wenn Sie keinen Code ausführen, oder es sonst sinnlos ist, vom Stromverbrauch des Algorithmus zu sprechen.
Dabei spielen die Effizienz des Algorithmus, die „Code-Effizienz“ der CPU und der Stromverbrauch der Hardware pro Tick eine Rolle. Code-Effizienz bedeutet in diesem Fall, wie viele CPU-Ticks benötigt werden, um ein bestimmtes Stück Programmcode einer höheren Schicht (C-Code usw.) auszuführen.
Zum Beispiel argumentieren einige Leute, dass 8-Bit-MCUs immer noch verwendet werden sollten, weil sie weniger Strom verbrauchen als 32-Bit-MCUs. Dies trifft tendenziell zu, wenn Sie den Spitzenstromverbrauch betrachten, aber nicht unbedingt, wenn Sie den Stromverbrauch im Zeitverlauf betrachten.
Nehmen Sie so etwas wie den C-Code my_uint32 = u32a + u32b;
. Die durchschnittliche 32-Bit-CPU führt diese Zeile in ein paar Assembler-Befehlen aus, was vielleicht etwa 10-20 CPU-Ticks bedeutet. Eine 8-Bit-MCU benötigt jedoch Hunderte von Assembler-Anweisungen in Form von Softwarebibliotheken, um denselben Code auszuführen. Vielleicht 500-1000 CPU-Ticks, ganz grob gezählt. Der 8-Bitter könnte also bis zu 100-mal mehr Ausführungsgeschwindigkeit / Stromverbrauch benötigen, um denselben Code auszuführen. Und dann ist es plötzlich egal, dass die MCU pro Tick weniger Strom zieht als die 32 Bitter.
Huismann
Steve Melonen