TIMER0_COMP_vect - Laufzeit Kontrolle

Gast #2725426
Lesenswert?

Hallo,
ich hab (höchst wahrscheinlich) eine sehr dämliche Verständnisfrage.

- ATmegaXX
- JTAG
- AVR Studio

Angenommen ich habe eine ISR(TIMER0_COMP_vect) eingerichtet die alle 
10ms aufgerufen wird. Um nun zu kontrollieren wie lange die Abarbeitung 
der Routine braucht könnte ich doch einfach einen Haltepunkt am Ende der 
Routine setzten und mir dann den Wert TCNT0 anschauen? oder nicht? 
Natürlich mit der Unsicherheit, dass Timer0 nicht mehrmals durchgelaufen 
ist.

danke
hal
#2725445
Lesenswert?

hal schrieb:

> Angenommen ich habe eine ISR(TIMER0_COMP_vect) eingerichtet die alle
> 10ms aufgerufen wird. Um nun zu kontrollieren wie lange die Abarbeitung
> der Routine braucht könnte ich doch einfach einen Haltepunkt am Ende der
> Routine setzten und mir dann den Wert TCNT0 anschauen?

Könntest du.
Je nach eingestelltem Vorteiler ist der Wert, den du kriegst so 
nichtssagend wie gar keine Messung.

Du könntest auch im Simulator auf den Anfang der ISR einen Breakpoint 
setzen, den im Simualtor angezeigten Zyklencounter ablesen (bzw. gleich 
darunter die aktuelle Simulationszeit), am Ende der ISR nachmal dasselbe 
und mit der Differenz die Zeit ablesen (ich glaub der SImulator hat 
sogar eine simulierte Stoppuhr für diesen Zweck, dann braucht man nicht 
rechnen).

Du könntest auch am Anfang der ISR einen Pin toggeln und am Ende wieder 
und dann mit dem Oszi die Pulsdauer ausmessen. Das hat den Vorteil, dass 
du tatsächlich die reale Zeit misst, so wie sie tatsächlich auftritt und 
du von nichts anderem, wie zb korrekt eingestellten Clock-Fuses, 
abhängig bist. Das was du misst, ist auch der tatsächliche 
Zeitverbrauch.
Gast #2726372
Lesenswert?

Mit dem Simulator funktioniert ja leider nicht die _delay..-Funktionen. 
Da ich im Projekt eine LCD-Display verwende und die Timingfunktionen 
über _delay gesteuert werden geht das leider nicht. Klar könnte ich die 
ISR Routine isolieren und testen, aber ich suche einen Weg ohne dies zu 
tun.

Pin toggeln ist klar, aber für was ist denn dann mein JTAG-Debugger gut? 
OK, Haltepunkte, Registerwerte usw. auslesen, in Ordnung.

Gibt es denn wirklich keinen Weg die Taktzyklen über den JTAG-Debugger 
zu bekommen, evtl. auch indirekt?
#2726459
Lesenswert?

hal schrieb:
> Wenn ich das Programm mit dem Simulator starte tut sich ab _delay_xx
> einfach nix mehr. Das Programm bleibt einfach stehen.

Es bleibt nicht stehen. Es dauert nur seine Zeit, bis der Simulator die 
paar Tausend Schleifendurchgänge gemacht hat.
Am besten ist es (wenn du den _delay nicht stillegen willst, weil du 
Zeit im Simulator messen musst), wenn du dir nach dem _delay einen 
Breakpoint setzt und dann den Simulator mittels F5 laufen lässt. Aber 
erwarte dir keine Wunder. Im Millisekundenbereich dauert das schon seine 
Zeit.
Gast #2726493
Lesenswert?

Ja so geht's ... mit dem Wissen, dass die _delay_xx mit dem Simulator 
extrem länger dauert. Ich hab am Anfang zwei Wartezeiten mit 3 Sekunden 
für die Versionsanzeige auf dem LCD-Display.

Allerdings wäre es toll wenn es auch in 'echt' mit dem JTAG-Debugger 
gehen würde!? ;-)

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