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
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.
Ein Wert reicht nicht, Du weißt ja nicht, wann der Eintritt erfolgte. Du mußt die Differenz bilden Austritt - Eintritt. Peter
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?
hal schrieb: > Mit dem Simulator funktioniert ja leider nicht die _delay..-Funktionen. Wie kommst Du darauf? Daß ohne Optimierung die Delays länger sind, das stört das LCD ja nicht. Peter
Wenn ich das Programm mit dem Simulator starte tut sich ab _delay_xx einfach nix mehr. Das Programm bleibt einfach stehen.
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.
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!? ;-)
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.