Hallo zusammen, ich möchte gerne die Laufzeit einer von mir definierten Funktion wissen. Das ganze möchte ich unter C mit der IAR Workbench for ARM IDE realisieren. Es soll in etwa so aussehen: . . . //Timer starten meine_definierte_Funktion(); //Timer stoppen //Ausgabe der Laufzeit . . . Warum das ganze, ich möchte den gleichen Code auf einem ARM7 und einem Cortex-M3 ausführen. Dann die beiden Laufzeiten vergleichen, und so auch die Performance schließen. Für Vorschläge bzw. Anregungen wäre ich dankebar! Danke für die Mühe, Chris
Installier dir die Demo von Keil µVision. Lass das ganze im Simulator laufen und mach Performance Analysis (integriert in der GUI). So ists am einfachsten. VG, /th.
Meine Variante: IO-Pin setzen Funktion aufrufen IO-Pin rücksetzen ..da kann man schön mit dem Oszi messen.
Der Vorschlag von "Baster" finde ich super, das per GUI finde ich zu undurchsichtig, bzw. ich würde dann gern wissen wie genau das funktioniert. Da ist die Idee mit dem IO-Pin echt toll. Falls es noch weiter Ideen gibt, bitte posten. Danke euch beiden!
Lass einen Timer durchlaufen, und vergleiche den Zählerstand vor und nach dem Funktionsaufruf. Ich verwende dafür ein paar Makros, siehe Anhang. Das sieht dann zum Beispiel so aus:
1 | PROFILE_START("meine_definierte_Funktion"); |
2 | meine_definierte_Funktion(); |
3 | PROFILE_END(); |
Ausgabe:
1 | meine_definierte_Funktion: 22 ms |
Beim Cortex-M3 kannst du dir über den System Timer (SysTick) die genaue Anzahl der benötigten Takte ausgeben lassen. Hier mal meine Funktionen vom STM32
1 | /*! |
2 | * \fn SysTick_Start(void) |
3 | * \brief Startet die Taktzählung |
4 | ******************************************************************************/ |
5 | void SysTick_Start(void) |
6 | { |
7 | /* Enable the SysTick Counter */ |
8 | SysTick_CounterCmd(SysTick_Counter_Enable); |
9 | } |
10 | |
11 | /*! |
12 | * \fn SysTick_Stop(void) |
13 | * \return SysTicks Anzahl der gezählten Takte |
14 | * \brief Stopt die Taktzählung, gibt das Ergebnis zurück und setzt den |
15 | * Zähler zurück |
16 | ******************************************************************************/ |
17 | u32 SysTick_Stop(void) |
18 | { |
19 | u32 SysTicks; |
20 | |
21 | /* Beenden der Taktzälung */ |
22 | SysTick_CounterCmd(SysTick_Counter_Disable); |
23 | /* Auslesen der benötigten Takte */ |
24 | SysTicks = 0xFFFFFF - SysTick_GetCounter(); |
25 | /* Clear the SysTick Counter */ |
26 | SysTick_CounterCmd(SysTick_Counter_Clear); |
27 | |
28 | return SysTicks; |
29 | } |
Chris __ schrieb:
> Falls es noch weiter Ideen gibt, bitte posten.
Beim Cortex-M3 gibt's auch ein cycle count Register.
Gruß
Marcus
Vielen vielen Danke alle zusammen! Da habe ich ja jetzt viel zum testen, ein super Forum ist das einfach!! Gruß Chris
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.