2 kurze Fragen: 1. Wie messe ich die Zeit (wie viele clk) meine ISR benötigt am geschicktesten. (am besten ohne timer etc.)? CortexM3 Systick variablen? 2. Wo/Wie befinden sich beim F1 die Interrupt vektoren, wieviele unterschiedliche Interrupt vektoren sind vorhanden und wie können diese aufgeteilt werden? Im Cube kann ich beim NVIC irgendwie nur interupt Prioritäten vergeben. Motivation: Ich möchte meine Interrupt Last verringern und daher einen IRQ vektor direkt auf meine funktion mappen, und die weniger häufigen/zeitkritischen Interrupts alle auf das HAL.
1. Ab besten mit dem Scope und dem wackeln eines freien Pins an den du rankommmst 2. Referenzmanual u. ae.?
Donald schrieb: > 1. Wie messe ich die Zeit (wie viele clk) meine ISR benötigt am > geschicktesten. So wie hier z.B. beschrieben: Beitrag "Zeit messen zwischen zwei Punkten im Programmfluß (STM32F103)" Oder mit dem Oszilloskop. Am Eintrit aud Autritt deiner ISR betätigst du einen Portpin dessen Aktivität du mit dem Oszilloskop beobachtest und daraus deine Zeit ermittelst. Donald schrieb: > Wo/Wie befinden sich beim F1 die Interrupt vektoren Im Startup File, üblicherweise <startup_stm32fxxxx.s> Donald schrieb: > wieviele > unterschiedliche Interrupt vektoren sind vorhanden und wie können diese > aufgeteilt werden? Im Cube kann ich beim NVIC irgendwie nur interupt > Prioritäten vergeben. Ich hoffe du bist des Lesens mächtig und kannst das Reference Manual deines Controllers durcharbeiten. Da steht nämlich alles drin.
Uwe B. schrieb: > 1. Ab besten mit dem Scope und dem wackeln eines freien Pins an den du > rankommmst Hmm digital also mit Hilfe der SFR ist dies umständlich/nicht möglich?
STM Apprentice schrieb: > Im Startup File, üblicherweise <startup_stm32fxxxx.s> Danke ahh schön das geht ja direkt in die HAL Interrupt funktion; jede einzeln, da inst mein Vorhaben einfach. STM Apprentice schrieb: > Ich hoffe du bist des Lesens mächtig und kannst das Reference > Manual deines Controllers durcharbeiten. Da steht nämlich > alles drin. Hat sich erüberigt ein blick ins vektorfile hat diesbezüglich genügt. Danke.
:
Bearbeitet durch User
Donald schrieb: > 2 kurze Fragen: > 1. Wie messe ich die Zeit > 2. Wo/Wie befinden sich Wenn du weiterhin dich nur mit sowas wie Cube und Konsorten befaßt, dann wird das nix mit deinen Fragen. Also fange endlich mal an, die Dokumente zu lesen, aus denen du erfahren kannst, wie die Arm-Cortex M (0..7) denn so funktionieren. Zunächst die grundlegenden Dinge bei arm.com und dann die darauf aufbauenden Dinge beim jeweiligen Hersteller. Die Interrupt-Vektoren befinden sich für gewöhnlich am Anfang des adressierbaren Speicherbereiches, also ab Adresse 0. Und es sind verschieden viele, je nach Chip. Und bei einigen Architekturen kann man sie vom Programm aus auch woandershin verlegen. Und üblicheweise befindet sich an der Stelle der Flash-Speicher, damit die CPU am Anfang etwas sinnvolles zum Abarbeiten vorfinden kann. Ist aber nicht überall so, z.B. haben die Chips von Infineon dort ROM, also nix, was man selbst mit dem beschreiben kann, was man braucht. Und bei den STM32 ist es so, daß der Flash normalerweise zweimal im Speichervolumen auftaucht: ab 0 und ab 8000000h (wimre), so daß die Programmierer die Wahl haben, ihr Programmier-Kunstwerk in einem der beiden Bereiche laufen lassen zu können. W.S.
Donald schrieb: > 1. Wie messe ich die Zeit (wie viele clk) meine ISR benötigt am > geschicktesten. (am besten ohne timer etc.)? CortexM3 Systick variablen? Moin, wenn Du SWD + SWO als Debug Interface nutzt, dann am geschicktesten mit einem Debugger, der Interrupts sinnvoll anzeigen kann... Also so in der Art: https://www.iar.com/knowledge/learn/debugging/interrupt-logging/ Segger Ozone sollte das wahrscheinlich auch können, da können aber eventuell andere User mehr Input zu liefern. Gruß, Michael
Michael F. schrieb: > https://www.iar.com/knowledge/learn/debugging/interrupt-logging/ Perfekt genau sowas suche ich; ja nutze SWD Debug. Gehts mit dem Cube irgendwie auch? (etwas weniger luxus ist auch ok die manuelle auslesung einer isrzeit in nur einem ereignis (ohne statistik mit max min avg etc). DWT_CYCCNT scheint mein gewünster counter zu sein. (Einen timer kann ich ja nicht direkt nutzen da dieser im breakpoint weiterläuft). Nur irgendie finde ich kein DWT in meinen SFR (STM32F1)?
:
Bearbeitet durch User
Donald schrieb: > Nur > irgendie finde ich kein DWT in meinen SFR (STM32F1)? die gehören zum ARM core der im CMSIS beschrieben ist.
Donald schrieb: > Nur irgendie finde ich kein DWT in meinen SFR (STM32F1)? Nimm doch einfach die paar Code-Zeilen die hier im angegebenen Thread gezeigt sind.
J. S. schrieb: > die gehören zum ARM core der im CMSIS beschrieben ist. Ja ist aber bei mir im Cube nicht in den SFR. Fehlt anscheinend im STM32F103.svd? STM Apprentice schrieb: > Nimm doch einfach die paar Code-Zeilen die hier im angegebenen > Thread gezeigt sind. Du meinst hier: https://mcuoneclipse.com/2017/01/30/cycle-counting-on-arm-cortex-m-with-dwt/ - ja dies ist gut und sollte funktionieren. Anyway sollte eigetnlich im cube in den SFRs sein? Die Lösung im link ist eigentlich ein workaround. Und user code einfügen damit man debuggen kann ist etwas discouraged...
Donald schrieb: > Wo/Wie befinden sich beim F1 die Interrupt Vektoren http://stefanfrings.de/stm32/stm32f1.html#ivektoren Ich weiß allerdings nicht, ob und wie man die Interrupthandler der HAL elegant durch eigene ersetzen kann. Notfalls kannst du die Vektoren ins RAM kopieren, verändern und dann SCB->VTOR darauf einstellen.
Stefan F. schrieb: > Ich weiß allerdings nicht, ob und wie man die Interrupthandler der HAL > elegant durch eigene ersetzen kann. Das geht sogar durch passende Einstellungen in CubeMX. Findet sich in den NVIC-Settings.
:
Bearbeitet durch User
Donald schrieb: > Die Lösung im link ist eigentlich ein workaround. > Und user code einfügen damit man debuggen kann ist etwas discouraged... Naja, also verstanden scheinst du es (noch?) nicht zu haben. Der DWT Cylce Counter hat erst mal nichts mit Debuggen zu tun.
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.