www.mikrocontroller.net

Forum: Compiler & IDEs Interrupt / Variable


Autor: Stephan Emde (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Stephan Emde (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.