mikrocontroller.net

Forum: Compiler & IDEs Anfängerproblem globale Variable AVR


Autor: Jakob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo... habe ein kleines Problem mit einer globalen Variablen
Das Programm ist nur ein Versuch um die Interrupt Funktion zu testen.
LED 1 soll leuchten wenn der Interrupt eintritt, zugleich soll die 
Variable a auf 1 gesetzt werden. Nun wird im Hauptprogramm die Variable 
a abgefragt, wenn sie 1 ist, soll LED 2 leuchten. Mein Problem: LED 2 
leuchtet nicht. Woran könnte das liegen?

Ich verwende MyAVR und einen Atmega 8.

Hier im Forum lese ich immer nur "volatile" bei ähnlichen Problemen...
Wäre schön wenn mir jemand helfen könnte.

Vielen Dank schonmal
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>

volatile char a = 0;
void init(void)
  {
    DDRD  = 0b11100000; //Pin 765 = Output 0-4 = Input
  DDRC  = 0b00111000; //status LED ausgänge (Port C: 3,4,5)
  GICR|=(1<<INT0);    //enables ext Interrupt (Pin 4, INT0, PD2)
    MCUCR = 0b00000011;  //Steigende Flanke an INT0 Löst aus
    sei ();       //Global Interrupt enable
  }
ISR(INT0_vect)
  {
    a = 1;          //setzte a auf 1
  PORTC |= (1 << PC5);  //schalte 1. LED ein
  }
void main(void)
  {
    init();
  while (1);
  {
    if (a == 1)      //wenn a = 1
    {
      PORTC |= (1 << PC4); //schalte 2. LED ein
    }
  }
  }

Autor: MPS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja, sieht soweit ganz ordentlich aus, nur hast du hinter der 
while-Schleife ein Semikolon. Das schließt dir schon die while-Schleife 
ab -> leere Endlosschleife.

Sollte Semikolon klappen.

HTH
Matze

Autor: Mathias Schnarrenberger (mps)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-dir

Autor: Mathias Schnarrenberger (mps)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte ohne Semikolon klappen...

Sorry für die ganzen Fehler.

Autor: Jakob B. (teddynator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, MPS

Hat funktioniert... Oh mann immer diese Kleinigkeiten.

Autor: Mathias Schnarrenberger (mps)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab ich auch erst nach m 10 mal drüberschauen gemerkt.

Als Tipp: Wenn du so was das nächste Mal hast, schau dir mal den 
Assemblercode an, den dir der Compiler generiert. Da hätte man sofort 
gesehen, dass er deine Abfrage + den Portzugriff wegoptimiert, sofern 
eine Optimierung eingestellt ist.

Autor: Jakob B. (teddynator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tipp
Ich werds beim Nächsten mal versuchen :)

Autor: G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt der Compiler da keine Warning aus? Vielleicht hilft es, -Werror zu 
verwenden. Das mache ich seit einer Weile, weil ich beim Compilieren 
immer ein paar Warnings übersehen hab

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.