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.
? 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.
Ä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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.