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


von Chris _. (jetronic)


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

von thorstendb (Gast)


Lesenswert?

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.

von Bastler (Gast)


Lesenswert?

Meine Variante:

IO-Pin setzen

Funktion aufrufen

IO-Pin rücksetzen


..da kann man schön mit dem Oszi messen.

von Chris _. (jetronic)


Lesenswert?

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!

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

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

von Jan D. (nbg)


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
}

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Chris __ schrieb:
> Falls es noch weiter Ideen gibt, bitte posten.

Beim Cortex-M3 gibt's auch ein cycle count Register.

Gruß
Marcus

von Chris _. (jetronic)


Lesenswert?

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