Sida 1 av 1

AVR och JTAG

Postat: 7 mars 2008, 11:33:26
av blastur
Hej

Jag sitter just nu och hackar på ett litet program för en ATmega32, som jag manipulerar genom JTAG interface. Jag använder mig av en USB-programmerare från Olimex, som skall vara ungefär som JTAG ICE. All utveckling sker i AVR Studio 4.

Hur som helst, mina problem börjar när jag försöker steppa genom kod och debugga mitt program. Om jag väljer t.ex "Run to cursor" så returnerar aldrig kontrollen till mig, trots att jag kan se på mina LEDs att koden har passerat punkten där jag ville stanna!

Min kod ser ungefär ut såhär:

rad1: initieraSkärm();
rad2: initieraAnnanSkit();
rad3:
rad4: while (1) {
rad5: blinkaMedLED();
rad6: sovLite();
rad7: }

Om jag sätter run to cursor och sätter markören på rad 3, så tappar jag kontrollen och programmet körs och min LED börjar blinka, vilket tycker jag indikerar att rad 3 har passerats! Varför får jag inte tillbaks kontrollen?

Jag har också märkt att när jag manuellt steppar genom vissa anrop, t.ex _delay_ms() (från util/delay.h) så tar det väldigt lång tid. Jag inser ju att det tillkommer viss overhead vid debugging, men skall det verkligen ta flera sekunder (MINUTER?!) att steppa genom en delay på några millisekunder?

Postat: 7 mars 2008, 11:46:16
av Stinrew
Gör det någon skillnad om du skriver in någon simpel instruktion på rad 3, istället för att ha den blank?

Postat: 7 mars 2008, 12:36:53
av AndLi
blastur: Min teori är: Eftersom rad 3 inte genererar någon kod, kan det inte sättas någon breakpoint som behövs för att göra en Run to cursor.

Man kan ju tycka att AVR studio då skulle lägga breakpointen på nästa rad som genererar kod, eller generera ett felmedeladne om att man inte kan lägga breakpoints på den raden...

Så prova att lägga cursorn på rad 4 istället, och kom ihåg att debugrar oftas beter sig "underligt"...

ÄR delay rutinen en loop du ska steppa igenom?