ARM7 und Cortex-M3. Wie kann ich die Zeit messen, die für eine Funktion gebraucht wird

OP #1553023
Lesenswert?

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
Admin Persönliche Seite #1553095
Lesenswert?

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
Angehängte Dateien:
#1553119
Lesenswert?

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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren