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

OP #1553023
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
Gast
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.
OP
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!
Admin Persönliche Seite
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:
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.