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.
//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?
>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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.