Ich möchte einen einfachen Profiler für meinen Mikrocontroller STM32F100VE schreiben. Ich habe gesehen, dass ich time.h einbinden kann und basierend auf den c-Standardfunktionen kann ich es verwenden, aber ich war verwirrt über _CLOCKS_PER_SEC_ 1000. Ich bin mir nicht sicher, ob dieser Ansatz funktionieren wird oder nicht.
Wie würde man versuchen, die Zeit zu messen, die eine Funktion in einer Mikrocontroller-Anwendung benötigt?
Das grundlegendste Manöver für komplizierte Funktionen besteht darin, die integrierten Timer zu verwenden.
Je nachdem, wie Sie sie einrichten, können Sie sie dazu bringen, genau die Anzahl der Taktzyklen zu zählen, die für die Ausführung einer bestimmten Funktion erforderlich sind. Lesen Sie einfach den Timer vor dem Funktionsaufruf und dann wieder nach dem Funktionsaufruf aus.
Sie müssen den Assemblercode durchsehen, um zu wissen, wie viel Zeit Sie benötigen, um den Timer für die Leseaufrufe zu deaktivieren, aber wenn es sich um eine langwierige Funktion handelt oder es Ihnen nichts ausmacht, ein paar Taktzyklen zu erreichen, ist dies in Ordnung.
Der einzige Fehler bei der Umwandlung von Taktzyklen zurück in Zeit ist der mögliche Fehler in der Oszillationsfrequenz der Systemuhr. Auch dies ist für Funktionen, deren Ausführung viel Zeit in Anspruch nimmt, vernachlässigbar.
Es hört sich so an, als ob Sie in Ihrem Fall etwas um 30 Hz (30 FPS) wollen, was im Vergleich zum Zeitzyklus der Prozessoruhr eine sehr lange Zeit ist.
Wenn es eine kleine Funktion ist, könntest du dir einfach die Demontage ansehen und die Anweisungen zählen.
Müssen Sie diese Informationen auch in Ihrer Software verwenden oder benötigen Sie sie nur für Debugging-/Entwicklungszwecke? Wenn es der zweite ist (ich nehme an, da Ihr Hauptziel die Profilerstellung ist), ist das Umschalten einer Ausgabe am Anfang und am Ende der Funktion und das Messen der Zeit mit einem Oszilloskop möglicherweise die schnellste, einfachste und genaueste Messung .
Wladimir Cravero
Ahmed Saleh
Spehro Pefhany
Wladimir Cravero
Ahmed Saleh
Wladimir Cravero
Ahmed Saleh
Jon L
Wouter van Ooijen
Spehro Pefhany