Forum: Compiler & IDEs Interrupt / Variable


von Stephan Emde (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

erst einmal vorweg: Beschäftige mich erst seit kurzem mit der
Problematik, habe also im Grunde keine Ahnung :).
Ich habe hier einen FPSLIC stehen und versuche  per Interrupt eine
Variable zu verändern. Leider funktioniert das ganze nicht so wie ich
es mir vorstelle.
Folgendes Problem:
Der FPGA löst auf dem AVR einen Interrupt aus. Dieser soll dann
entsprechend die Variable umsetzten, damit diese dann später im
Hauptprogramm (oder woanders) weiterverwendet werden kann.
Das funktioniert auch soweit, dass , wenn ich in der Interrupt Routine
schreibe:
PORTD=counter0++;
alles wunderbar funktioniert.
Aber sobald ich die Port-zuweisung auslager (so wie im Quelltext),
bekomme ich nur noch den Startwert ausgegeben.

Compiliert unter CodevisionAVR.

Ich hoffe ihr könnt mir weiterhelfen, denn ich komm nicht weiter.

von Rufus T. Firefly (Gast)


Lesenswert?

//do nothing until an interrupt occurs
     while(1)
     {
         PORTD=counter0;
     }

Der Kommentar ist ein bisschen irreführend, nicht?

Ist sichergerstellt, daß auch PORTD als volatile deklariert ist?
counter0 hast Du ja bereits volatile deklariert (das war die
naheliegende Vermutung.

Möglicherweise optimiert Dein Compiler diese Endlosschleife irgendwie
weg; du könntest zum Testen ja alternierend 0 und den Wert von counter0
an den Port anlegen, dann sollte ein Oszilloskop ein recht
hochfrequentes Flackern wahrnehmen können ...

Das ganze mal in 'nem Debugger/Simulator angesehen? Mal das
Assemblerlisting der Endlosschleife angesehen?

von OldBug (Gast)


Lesenswert?

>Möglicherweise optimiert Dein Compiler diese Endlosschleife irgendwie
>weg;

Es handelt sich offensichtlich nicht um GCC, deswegen können wir hier
auch nur Vermutungen anstellen...

von Stephan Emde (Gast)


Lesenswert?

Mit der neuesten Version von Codevision läuft selbst die Port-zuweisung
im Interrupt nicht mehr :(. Mit der alten Version schon.
Jetzt bin ich etwas ratlos. Hab das erst einmal aufgegen und widme mich
leichteren Sachen.

Trotzdem vielen Dank für die Hilfe.

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
Noch kein Account? Hier anmelden.