Interrupt / Variable

Gast #178812
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.
Angehängte Dateien:
Gast #178813
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?
Gast #178815
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren