www.mikrocontroller.net

Forum: Compiler & IDEs Interrupt + main-schleife


Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich hab folgenden code:
int i = 0;

ISR(USART_RXC_vect)
{
  uart_getc_nowait();
  uart_puts("?!");
  i = 1;
}

int main()
{
  ...

  while(1)
  {
    if(i == 1)
    {
      uart_puts("hello");
    }
  }

  return 0x0;
}

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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was, schon 10min rum und keiner schreit "volatile"?

Also:
 volatile int i = 0;

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
funktioniert - danke!

mfg blan

Autor: blan (Gast)
Datum:

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

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

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

mfg blan

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, hab vergessen den aufruf zu posten. danke es funktioniert!

mfg blan

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.