Problem mit Schleife in Atmel-C

Nov 10, 2004 5 Replies

Hallo,



nach langer Suche habe ich in einem Programm ein Fehler lokalisieren=20 k=F6nnen, nun suche ich einen Weg um diesen zu umgehen.



Ich habe in einem C-Programm f=FCr einen ATMega8-16 eine Endlosschleife i= m=20 Main-Teil:



=3D=3D=3D int main(void) { [initialisierungen] while(1) { test(); } } =3D=3D=3D



test sieht so aus:



=3D=3D=3D void test(void) { if (irq-variable) { PORTD |=3D (1


: Hallo,

: nach langer Suche habe ich in einem Programm ein Fehler lokalisieren : k?nnen, nun suche ich einen Weg um diesen zu umgehen.

: Ich habe in einem C-Programm f?r einen ATMega8-16 eine Endlosschleife im ...

: Ich habe herausgefunden, da? es mit den GCC-Optimierungen zusammenh?ngt, : ein -O0 also Parameter l?sst dies klappen, aber an anderer Stelle : brauche ich ich die Optimierungen.

: Wie kann ich es sonst noch in eine Funktion auslagern?

Ist die Variable mit "volatile" deklariert?

[...]

richtig waere "volatile const"

Das habe ich zwischenzeitlich auch rausgefunden :-)

Allerdings klappt das nur im Original-Programm, nicht in der hier=20 geposteten Test-Abschnitt.

Welcher Teil mu=DF so deklariert sein? Die 1 f=FCr die while-Schleife? Od= er=20 die 'irq-variable' diese aber wohl nicht als const?

Danke schonmal f=FCr die Antworten!

Ciao Dschen

--=20 Dschen Reinecke

=3D=3D=3D der mit dem Namen aus China =3D=3D=3D

formatting link
mailto: snipped-for-privacy@dschen.de

[...]

Die irq-variable! Sie ist fuer die "test"-Funktion volatile, denn sie kann sich ohne vom "test" beinflusst zu werden aendern, und const, weil test sie nur lesen, nicht aber beschreiben soll.

Juergen Hannappel schrieb...

Das const w=FCrde ich weglassen, da sonst die IRQ-Routine selbst die=20 Variable nicht beschreiben darf oder vorher const wegcasten mu=DF.=20 Ansonsten macht IMO const volatile f=FCr read-only hardware-register Sinn.

- Heinz

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required