Forum: Compiler & IDEs Anfängerproblem globale Variable AVR


von Jakob (Gast)


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
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <inttypes.h>
4
5
volatile char a = 0;
6
void init(void)
7
  {
8
    DDRD  = 0b11100000; //Pin 765 = Output 0-4 = Input
9
  DDRC  = 0b00111000; //status LED ausgänge (Port C: 3,4,5)
10
  GICR|=(1<<INT0);    //enables ext Interrupt (Pin 4, INT0, PD2)
11
    MCUCR = 0b00000011;  //Steigende Flanke an INT0 Löst aus
12
    sei ();       //Global Interrupt enable
13
  }
14
ISR(INT0_vect)
15
  {
16
    a = 1;          //setzte a auf 1
17
  PORTC |= (1 << PC5);  //schalte 1. LED ein
18
  }
19
void main(void)
20
  {
21
    init();
22
  while (1);
23
  {
24
    if (a == 1)      //wenn a = 1
25
    {
26
      PORTC |= (1 << PC4); //schalte 2. LED ein
27
    }
28
  }
29
  }

von MPS (Gast)


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

von Mathias S. (mps)


Lesenswert?

-dir

von Mathias S. (mps)


Lesenswert?

Sollte ohne Semikolon klappen...

Sorry für die ganzen Fehler.

von Jakob B. (teddynator)


Lesenswert?

Vielen Dank, MPS

Hat funktioniert... Oh mann immer diese Kleinigkeiten.

von Mathias S. (mps)


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.

von Jakob B. (teddynator)


Lesenswert?

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

von G. (Gast)


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

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
Noch kein Account? Hier anmelden.