Interrupt + main-schleife

Gast #586188
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
Gast #586419
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
#586443
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...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.