JTAG hopper rundt i koden

Hej

Jeg har kæmpet med et meget mystisk problem: (Har også spurgt i dk.teknik.elektronik).

System:

AVR Studio 4.18 WINAVR JTAG Ice MkII Olimex board med MEGA32

Problem:

Når jeg laver et breakpoint et sted i koden, sker det at den kommer dertil på mystisk vis. Eksempel:

if( x == 7 ) Breakpoint #1 { x++; Breakpoint #2 }

Her kan den finde på at stoppe ved breakpoint #2 UDEN at komme til #1 ...

Et andet eksempel er nr jeg singlestepper i en switch. Her kan den pludselig hopper fra een case til en anden. Og når jeg så ser på hvad variablen jeg lavede en switch på, egentlig er, så er værdien OK, men den er i en anden case...

Virkelig, virkelig mystisk. Jeg har ALDRIG set noget lignende. Jeg kan nogle gange bare indføre noget dummy kode, eller flytte rundt på to cases, så fungerer det igen.

Jeg har overvejet stack overflow, med det er tilsyneladende ikke problemet. Kan det være noget med en .elf fil som ikke er opdateret?

Håber der er en der kan hjælpe mig ud af dette problem, for det er dælme træls når man ikke kan debugge !

mvh Kåre

Reply to
Kåre
Loading thread data ...

Jeg har haft noget lignende på en ARM med JTAG. Det var flashen der kørte for stærkt og blev ustabil så koden crashede engang imellem. Der manglede en waitstate, efter den blev indført kørte det. Fejlen var der ikke når man kørte i RAM, da den er hurtig nok til at køre uden waitstates.

Men jeg ved ikke om det samme gælder for din AVR.

--
Ulrik Smed
Aarhus, Denmark
Reply to
Ulrik Smed

Hvis du har kode optimering aktiveret, da kan der ske disse ting, især når man optimerer for kodestørrelse.

Fx kan x++; være genbrugt flere andre steder i koden:

if( x == 999 ) { x++; // Dette kan fx udføres ved at genbruge koden i breakpoint #2 } .... if( x == 7 ) Breakpoint #1 { x++; Breakpoint #2 }

Christen

Reply to
Christen Fihl

Sandsynligvis pga. optimizer rearrangerer koden.

Garanteret pga. optimizer rearrangerer koden.

Prøv at bygge projektet uden optimering.

Leo Havmøller.

Reply to
Leo Havmøller

...

yep, c sourcen og assembly koden ligner ikke n=F8dvendigvis hinananden ret meget n=E5r man har optimering.

hvis man kan, s=E5 skift til at se c/asm mixed s=E5 bliver det helt tydeligt.

-Lasse

Reply to
langwadt

Taktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktaktak taaaaaaaaaaaaaaaaaaaak !!!! Mand jeg troedejeg var ved at blive tosset. Har arbejdet med mange andre udviklingsværktøjer, men aldrig prøvet det her før. Troede squ jeg havde mistet grebet om at lave C-kode...

Kodeoptimering stod til "Optimize for size", og ja, så kan det åbenbart gå galt i dette miljø. Det gør det sikkert også andre steder. Men i de andre miljøer jeg arbejder i, er der som default opsætning IKKE valgt optimering i debug mode.

Igen, mange tak! Nu er jeg på banen igen :o)

mvh Kåre

Reply to
Kåre

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.