Forum: Compiler & IDEs Interrupt + main-schleife


von blan (Gast)


Lesenswert?

hallo,

ich hab folgenden code:
1
int i = 0;
2
3
ISR(USART_RXC_vect)
4
{
5
  uart_getc_nowait();
6
  uart_puts("?!");
7
  i = 1;
8
}
9
10
int main()
11
{
12
  ...
13
14
  while(1)
15
  {
16
    if(i == 1)
17
    {
18
      uart_puts("hello");
19
    }
20
  }
21
22
  return 0x0;
23
}

warum wird wenn ein zeichen empfangen wird nicht die if-bedingung in der 
main-schleife ausgelöst? die zeichen "?!" werden gesendet also wird der 
interrupt auch aufgerufen... jemand eine idee?

mfg blan

von Gast (Gast)


Lesenswert?

Was, schon 10min rum und keiner schreit "volatile"?

Also:
 volatile int i = 0;

von blan (Gast)


Lesenswert?

funktioniert - danke!

mfg blan

von blan (Gast)


Lesenswert?

ich hab noch eine frage: kann ich diese meldung ignorieren weil der code 
funktioniert und ich keinen fehler sehe?
1
main.c:33: warning: passing argument 1 of fifo_push discards qualifiers from pointer target type

der funktionskopf lautet so:
1
int8_t fifo_push(fifo_t *fifo, const int8_t *data);

und meine globale variable sieht so aus:
1
volatile fifo_t *fifo;

mfg blan

von Johannes M. (johnny-m)


Lesenswert?

Warum postest Du nicht wenigstens die Zeile, auf die sich die Warnung 
bezieht? Immerhin geht es bei der Warnung offensichtlich weder um den 
Prototypen, noch um irgendeine Variable (die zudem noch von einem Typ 
ist, dessen Definition nirgends angegeben ist...), sondern 
augenscheinlich um den Funktionsaufruf! Und warum sollte man eine 
Warnung ignorieren, wenn man sie vermeiden kann? Zumal eine solche 
Warnung oft zu einem unerwünschten Ergebnis führt. Wenn Du nicht mehr 
Information preisgeben willst oder kannst, dann sieh wenigstens zu, dass 
die Typen und Speicherklassen der übergebenen Parameter mit denen 
übereinstimmen, die die Funktion erwartet.

EDIT:
Bevor noch mehr Unklarheiten ausgetauscht werden: In Deinem Falle würde 
es VERMUTLICH reichen, den ersten Parameter der Funktion mit einem 
"volatile" zu versehen...

von blan (Gast)


Lesenswert?

sorry, hab vergessen den aufruf zu posten. danke es funktioniert!

mfg blan

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.