Forum: Mikrocontroller und Digitale Elektronik UART zu UART


von Rafi D. (alexanderw)


Angehängte Dateien:

Lesenswert?

Ich benutze die UART lib von Fleury, bzw. einen Teil. Sende daten an 
einen Empfänger und bekomme entsprechende Daten auch wieder. Nach paar 
mal drücken der Tasten erhalte ich ein overflow. Wird der Puffer einfach 
weiterbeschrieben und nicht nach dem FIFO Prinzip geleert?

Ich wollte jetzt die erhaltenen Daten von UART0 (RX) an den UART2 
schicken. Und dem UART2 dann an den PC. Wie kann ich das am besten 
realisieren?
strcpy(TxPuffer2, RxPuffer0)?

Bin dankbar für denkanstösse.

von Karl H. (kbuchegg)


Lesenswert?

?

Da hatten wir doch vor kurzen schon mal
1
// Einen String per USART 0 empfangen
2
void empfangeString0(char*puffer)
3
{  
4
  while (empfangeZeichen0() != '\n')  // Solange Zeichen in den Puffer schreiben bis Line Feed erreicht ist
5
  {
6
    *puffer++ = empfangeZeichen0(); // Empfangenes Zeichen in Puffer schreiben und Puffer um 1 erhöhen
7
  }
8
  *puffer = '\0';
9
10
}

Du kannst es drehen und wenden wie du willst. Du MUSST nach den Regeln 
spielen! Und wenn du dich Kopf stellst und mit dem Fuss aufstampfst, das 
hilft dir nichts. Regeln sind Regeln. UNd auch du kannst sie nicht 
brechen.

Du Funktion empfangeZeichen0() liefert nicht nur Zeichen sondern auch 
die Information, ob überhaupt ein Zeichen empfangen wurde. Solange du 
diese Information ignorierst wird das nichts. Du kannst nur dann ein 
Zeichen an den String anhängen, wenn auch eines empfangen wurde. Und 
solange du diese simple Regel misachtest, wird das auch nichts.

Mal ganz davon abgesehen, dass JEDER Aufruf von empfangeZeichen0() das 
jeweils nächste Zeichen liefert.


Und ich glaube ich hab auch damals schon geschrieben: Peter liefert zu 
seinen UART Funktionen eine Demo mit, in der man sich ansehen kann, wie 
die Funktionen zu benutzen sind. Im speziellen, wie empfangeZeichen0 zu 
benutzen ist. Diese empfangeString0 ist auf jeden Fall grober Mist. Egal 
ob du sie selber geschrieben hast, oder der bei dem du sie geklaut hast. 
Vom Fleury Peter stammt sie auf jeden Fall nicht.

von Karl H. (kbuchegg)


Lesenswert?

Äh Moment mal.

Wo ist das her
1
// Ein Zeichen per USART 0 empfangen
2
unsigned int empfangeZeichen0(void)
3
{
4
  unsigned char tmpende;
5
  unsigned char zeichen;
6
7
  if (RxStart0 == RxEnde0)
8
  {
9
    daten = 0;
10
  }
11
  
12
  tmpende = (RxEnde0 + 1) & UsartRxPufferMaske;
13
  RxEnde0 = tmpende;
14
  zeichen = RxPuffer0[tmpende];
15
  daten = 1;
16
17
  return zeichen;
18
}

das ist doch nicht vom Fleury Peter. Das ist ja noch größerer Unsinn als 
die String Empfangsfunktion.

Warum änderst du Peters Vorgabe um, wenn du nicht in der Lage bist, das 
korrekt zu machen? Peters Funktionen sind gut - deine sind mies.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.