Dauer von Befehlen (für Timeout)

Gast #1148106
Lesenswert?
• ▲
▼
Hi,

ich habe eine Funktion, die abfragt ob Daten über UART zu mir gesendet 
wurden. Diese Funktion sieht so aus:
1
uint8_t USART_get(void)
2
{
3
  //Warte bis Daten erhalten
4
  while ( !(UCSRA & ( 1<<RXC)) );
5

6
  //Hole Daten vom Puffer und gib sie zurück
7
  return UDR;
8
}

So da ich jetzt aber in einer Endlosschleife lande, wenn ich diese 
Funktion aufrufe, möchte ich ein Timeout einbauen:
1
uint8_t USART_get(void)
2
{
3
  uint8_t i = 0;
4

5
  //Warte bis Daten erhalten
6
  while ( !(UCSRA & ( 1<<RXC)) )
7
  {
8
    if(i == 255)
9
    return 255;    // Error Code
10
    i++;
11
  }
12

13
  //Hole Daten vom Puffer und gib sie zurück
14
  return UDR;
15
}

Also im Prinzip, dass ich in der While Schleife eine Zahl immer 
inkrementiere und abfrage ob sie einen gewissen Wert erreicht hat. Und 
ich habe aber keine Ahnung wie ich mir ausrechnen kann, welchen Wert ich 
für z.b. 2 Sekunden brauche. (Das Beispiel hier ist nur zu 
veranschaulichung, ich weiß das ich nicht 255 zurückgeben kann als Error 
Code, weil es ja bei UDR auch auftretten kann und ich weiß auch, dass 
ich wahrscheinlich i als 16 bit Variable deklarieren muss)

Kann mir jemand erklären, wie ich das Ausrechnen kann? Falls jemand eine 
bessere Lösungsidee hätte, nur her damit!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren