Forum: Compiler & IDEs Cycle counter in VSCode


von Schwierig (ruelps)


Lesenswert?

Hallo,

ich steige dieser Tage in das NRF Connect SDK von Nordic ein. Das nutzt 
Zephyr mit DeviceTree. Steile Lernkurve ist schon mal milde ausgedrückt. 
Wenn man da nicht täglich mit arbeitet, wird man das Meiste wohl wieder 
vergessen.
Zephyr wimmelt ja wieder von vielfachen defines, so daß ich letztendlich 
gar nicht mehr weiß, was da im Hintergrund gemacht wird. Hat bei großen 
und Komplexen Programmen sicherlich auch seinen Vorteil.

Jedenfalls will ich jetzt mal nachschauen, wie viele Takte z.B. eine 
Funktion benötigt. Bei den allermeisten IDE ist immer irgendwo ein 
Cyclecounter, der beim Steppen abgelesen werden kann. Sowas habe ich bei 
VSCode bzw. dem ganzen Nordic-Bundle nicht gefunden. Irgendwelche 
Funktionen zur Laufzeit kommen wegen Aufwand gar nicht in Frage.
Sonst hatte ich mir im ungünstigsten Fall mit DWT->CYCCNT geholfen, nur 
leider hat mein derzeitiger nrf52810 das nicht implementiert.
Kennt jemand eine andere Lösung? VSCode ist ja auch (fast) unendlich 
konfigurierbar.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Schwierig schrieb:
> . Bei den allermeisten IDE ist immer irgendwo ein Cyclecounter, der beim
> Steppen abgelesen werden kann.

Basiert der dann nicht auf dem DWT Cycle Counter? Ohne den kann die IDE 
ja kaum die Takte zählen. Du kannst dir zwar mit dem SysTick oder 
sonstigen Hardware Timern behelfen aber die zählen ja nicht die 
eigentlichen CPU Takte.

von Schwierig (ruelps)


Lesenswert?

Genau. Mit einem frei laufenden Timer geht das auch, aber dann muß man 
schon wieder selber rechnen (bzw. sich einmal eine Meßfunktion 
schreiben, was ja auch doof ist).

nrf52810, ein Cortex M4 ohne DWT. Sachen gibt's.

Ich habe mir jetzt so beholfen: Da ich ein nRF52DK mit einem nrf52832 
habe (emuliert dann einen nrf52810), mache ich einfach eine weitere 
build configuration für den nrf52832 und nutze da die vorhandene 
DWT-Einheit für diese Messungen. Es gibt natürlich noch andere 
Unterschiede (keine FPU bei einem M4...), aber ich nutze ja den selben 
code.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Schwierig schrieb:
> Genau. Mit einem frei laufenden Timer geht das auch, aber dann muß man
> schon wieder selber rechnen

Und der misst halt Echtzeit und zählt auch die Zeit mit, die die CPU im 
Idle ist...

Schwierig schrieb:
> ich einfach eine weitere build configuration für den nrf52832 und nutze
> da die vorhandene DWT-Einheit für diese Messungen

Klingt nach der besten Lösung...

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
Noch kein Account? Hier anmelden.