Interrupt / Variable

Gast #178812
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
//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 #178814
>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...
Gast #178815
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.