mikrocontroller.net

Forum: Compiler & IDEs Interrupt beim UART


Autor: jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich brühte gerade über folgendem Problem. Mein AVR soll auf Anfrage
Daten ans UART schicken. Also PC sendet z.B. "gibDaten" an AVR und
der haut dann seine Messwerte übers UART raus.
Da ich ja jetzt nie weis wann der PC Daten haben will dachte ich mir
das müsste ja idealer Weise mit einem Interrrupt zu lösen sein. Hab mir
da auch schon einen auserkoren, nämlich diesen: SIG_UART_RECV

Hab dazu folgendes geschrieben:

SIGNAL(SIG_UART_RECV)
{
  unsigned char input;
  input = inp(UDR);
  if( input == "S")  send_string_uart("Start transmission");
}

Meinem Verständnis nach müsste nun bei jedem empfangenen Zeichen ein
Interrupt ausgelöst werden. Dann sollte gecheckt werden ob das Zeichen
"S" ist und wenn ja der Text ans UART gesendet werden.

Leider passiert aber nichts. Kann mir jemand sagen ob ich einen
Denkfehler mache oder ob womöglich der Code falsch ist.

Danke schon mal Vorab, der Jochen

Autor: jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW im Hauptprogramm wurden die Interrupts natürlich mittels
sei();
eingeschalten.

Jochen

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Leider passiert aber nichts. Kann mir jemand sagen ob ich einen
> Denkfehler mache oder ob womöglich der Code falsch ist.

Wieder mal einer, der den Unterschied zwischen einer Zeichenkonstante
(die eine kleine Integer-Zahl ist) und einer Zeichenkettekonstante
(die ein Array ist) nicht verstanden hat.

Der Compiler müßte Dir dafür eine Warnung gegeben haben (comparision
between pointer and integer oder sowas), warum ignorierst Du diese?

if (input == 'S')

...und es sollte funktionieren.

Allerdings ist es keine so gute Idee, aus einer Interruptfunktion
heraus langwierige Dinge zu tun (und das ungepufferte Senden über die
UART ist langwierig, weil man zwischendrin ja warten muß, bis der
Sendepuffer leer ist).  Besser ein Flag setzen und den Interrupt in
der Hauptschleife arbarbeiten.  Anfernfalls bleiben alle Interrupts so
lange blockiert.

Autor: jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Danke erst mal für den Hinweis, werd das bei Gelegenheit überprüfen.

Jochen

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.