- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: Timeout für das Einlesen von Zeichen via RS232

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332

    Blinzeln Timeout für das Einlesen von Zeichen via RS232

    Hallo Zusammen,

    die folgende Routine hat den Hacken, das wenn man sie aufruf und keine Zeichen kommen, das man ewig wartet.

    Da ich mein Program in diesem Programmteil sequiell abarbeiten lassen will, wäre ein Timeout sehr gut.

    Routine aus der RN-Code Schnipsel
    Code:
    static inline uint8_t uart_getc_wait (void)
     {                                            // Warten, bis etwas empfangen wird      
    while (!(UCSRA & (1 << RXC)))
           ;   
    return UDR;                               // Das empfangene Zeichen zurückliefern
     }
    Hat jemand eine Idee, wie der Compiler eine gute Timeoutzeit berechnen kann, oder wie macht Ihr das in diesem Fall.

    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    wie wärs, wenn du einfach vor der While-Schleife noch eine Abfrage machst, ob überhaupt Daten anliegen? Das geht natürlich nur, wenn du einen Buffer hast.
    Oder du machst das via Timer, der nach x ms einen Interrupt auslöst, ein Flag setzt und du überprüfst dann in der While-Schleife, ob das Flag gesetzt ist und verlässt sie dann.

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Roboter-Spezialist Avatar von robo_tom_24
    Registriert seit
    04.02.2012
    Ort
    Burgenland, Österreich
    Beiträge
    485
    Oder du machst es gleich nur mit Interrupts? (USART0_RX_vect)

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Daran habe ich auch bereits gedacht.

    Da kann der Processor wenigstens noch was vernünftiges in der Zwischenzeit machen.

    Derzeit scheint mir aber mein CMPS nicht wirklich zu antworten, wenn ich das in den Griff bekommen habe,
    werde ich auf Interrupt umstellen. Das ist meines erachtens die sauberste Lösung.

    Gruss R.
    Kaum macht man es richtig, schon funktioniert's ...

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    So vielleicht:

    static inline uint8_t uart_getc_wait (void)
    { // Warten, bis etwas empfangen wird
    int timeout=0;
    while (!(UCSRA & (1 << RXC)) && (timeout++ < 10000));

    if(timeout < 10000) return UDR; // Das empfangene Zeichen zurückliefern
    else return 0; // timeout aufgetreten
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Zeichen Empfangen Rs232
    Von 3mal3 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 19.08.2006, 15:50
  2. Timeout für SUART ?
    Von AVR-Knecht im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 03.03.2006, 08:58
  3. [ERLEDIGT] Zeichen von PIC 12F675 über Rs232 versenden
    Von der dritte Mann im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 22.11.2005, 20:30
  4. Frage bezüglich Zeichen einlesen
    Von Andree-HB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 11.08.2005, 14:44
  5. Daten von RS232 einlesen und dann in EEProm?
    Von sentinel.dd im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 08.11.2004, 10:12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test