Hallo zusammen, in einem anderen Thread ist mal wieder das Thema "blos nicht optimieren, wo kein Bottleneck ist" dran. Da drängt sich natürlich die Frage auf: Wie identifiziert ihr Bottlenecks? Wenn ich den Verdacht habe, eine Funktion könnte zeitkritisch sein, zähle ich manchmal die Takte mit dem DWT_CYCCNT-Taktzähler. Manchmal wird auch ein freier Pin vor der Funktion gesetzt, nach der Funktion zurückgesetzt und mit dem Oszilloskop der Tastgrad betrachtet. Das funktioniert natürlich nur an den Stellen, wo man schon vorher weiß, wo man suchen muss. ISRs sind da oft der heiße Kandidat. Bei den meisten Sachen ist es eher ein: "Wird schon so passen. Ich gebe mir jetzt bei dieser neuen Funktion keine wahnsinnige Mühe der perfekten Optimierung, aber ich achte schon ein bischen darauf, einen möglichst kleinen Fußabdruck ohne große Verrenkungen hinzubekommen." Wie siet es bei euch aus? Habt ihr edle Werkzeuge wie Lauterbach & Co. für diesen Zweck zur Verfügung, oder behelft ihr euch anderweitig?
Wenn es sein muss lass ich einen Timer laufen der mir die Mikrosekunden zählt. Das genügt für meine Zwecke - jedenfalls bisher. Und um welches Timing gehts bei Dir ? Gruß Peter
Peter schrieb: > Und um welches Timing gehts bei Dir ? Es geht um Profiling - wissen, welche Funktion/Funktionalität optimiert gehört und welche in Ruhe gelassen werden kann (und sollte).
:
Bearbeitet durch User
Walter T. schrieb: > Wie siet es bei euch aus? Habt ihr edle Werkzeuge wie Lauterbach & Co. > für diesen Zweck zur Verfügung, oder behelft ihr euch anderweitig? Ja :-). Allerdings benutze ich auch gerne den DWT_CYCCNT, für einfache Sachen reicht das locker aus, in ISRs auch. Wenn man ein Betriebssystem hat, dann muss man aber aufpassen, wenn der Scheduler einen Taskwechsel macht oder eine ISR dazwischenfunkt dann ist der Zykluszähler hinfällig. Bei dynamischen Prozessorclocks wirds auch ekelig. Manche Debugger spielen auch selbst am DWT_CYCCNT rum. Da muss man aufpassen. Der ETM/SWD Trace ist schon eine geniale Sache wenn man es zur Verfügung hat. Prinzipiell kann das wohl sogar der OpenOCD, stehen zumindest Stichworte im Manual dazu. Allerdings steht und fällt das Ganze mit der Aufbereitung der Daten. Und da macht Lauterbach einen sehr guten Job, die grafische Ansicht ist gut gemacht. Performancemessung ist aber eher ein Nebenschauplatz. Gerade wenn Ursache und Wirkung im Programmablauf weit auseinander liegen, dann ist so ein Trace extrem hilfreich. Eine weitere Möglichkeit Zeiten zu messen, ist es Hardwaretimer zu benutzen. Diese haben den Vorteil, das man die oft unabhängig vom Prozessorclock laufen lassen kann. Sowas verwenden wir teilweise auch in der Finalen Software um zur Laufzeit Performancedaten zu sammeln.
Orbuculum: https://github.com/orbcode https://discord.com/channels/613131135903596547/614885210395508738
Wennn man einen Pin frei hat, kann man auch einfach am Anfang einer Rechnererei eine LED anschalten und am Ende wieder aus. Da sieht man sehr schön, ob sich was tut oder der Teil eh kaum Zeit kostet (dunkel). Ein Oszi geht natürlich auch.
Ich mache das ganze gerne grafisch im MDK-ARM SystemAnalyzer (bzw. vorher im Logic Analyzer und Event Viewer), dafür brauchts aber nen schnellen SWO sampler. Besonders interessant für Interrupt-Laufzeiten. Auf die Weise hab ich bei einem Projekt mit Ethernet und Showlaser die Engstellen > 100kpps sowie gelegentliche HickUps finden können, wenn man verschiedene Events und eigene Instrumentierungen (Variablen im Code, zur Darstellung via SWO) in Zusammenhang bringt. Ausmessen einzelner Routinen via Timer oder DWT funktioniert immer prima, bei größeren Zusammenhängen zwischen Threads und Interrupts ist eine grafische Darstellung manchmal hilfreich.
:
Bearbeitet durch User
Ich nehme meistens die Timer. Das reicht oft aus. Bei Interrupt-Funktionen habe ich auch schon mal Pins gesetzt, damit man mit dem Scope schauen konnte. Auf meinen aktuellen Plattformen habe ich genug Reserve, so dass ich das nicht oft machen muss.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.