Forum: Mikrocontroller und Digitale Elektronik Frage zu Buffer_Size von Kommunikation über UART


von oliver (Gast)


Lesenswert?

hallo,
ich sende und empfange Daten uber UART0 mit 8 bits, no parity 1 stop 
bit,  115200bit/s und asynchron.
Jetzt stelle ich fest, dass ich nicht mehr als 255 Charater senden kann.
wenn die Länge von Daten >255 ist, dann wird die Rest auch gelesen aber 
von ertem Teil abgeschnitten.
Ich habe noch mein Datenblatt gelesen aber habe ich nichts über die 
maximale Länge des Buffer gefunden.

kann jemanden mir sagen wo das Problem liegt.

von Peter D. (peda)


Lesenswert?

oliver schrieb:
> kann jemanden mir sagen wo das Problem liegt.

Ja.
Irgendwo in Deiner unbekannten Hardware und Software.


Peter

von oliver (Gast)


Angehängte Dateien:

Lesenswert?

hallo,

die Hardware ist der Mikrocontroller AT90CAN128.
anbei die Initialisierung der UART-Funktion, und senden-Funktion.
Ich habe nur ein Teil des Programms geschickt.
Das Problem liegt in der FunktionX,
in FunktionX bekomme ich das Ergebnis aber es wird getrennt.
Die Ausagbe sieht so aus:

0: 20F0790C00000011 0300 0900 0400 0000 1: 20588D0C00000055 0300 0500 
0300 0300 2: 209C970C000000D7 0200 0700 0200 0000 3: 204E8D0C000000BC 
0200 1800 0300 0000 4: 20598D0C00000062 0400 0700 0400 0300 5: 
20B9980C000000E5 0300 0300 0300 0000 6: 20D7710C000
0001C 0300 1100 0400 0000 7: 202F860C00000038 0300 0600 0400 0000

danke

von Volker S. (volkerschulz)


Lesenswert?

oliver schrieb:
> Ich habe noch mein Datenblatt gelesen aber habe ich nichts über die
> maximale Länge des Buffer gefunden.

Dann musst Du genauer lesen, es steht garantiert drin. Ich tippe mal auf 
einen 2 Level FIFO mit je einem Byte.. Also zwei Byte Puffer.

Es gibt auch ein Statusbit fuer Data Overrun, das Du auswerten kannst.

Volker

von Karl H. (kbuchegg)


Lesenswert?

> in FunktionX bekomme ich das Ergebnis aber es wird getrennt.

Was heißt das?

> 0: 20F0790C00000011 0300 0900 0400 0000 1: 20588D0C00000055 0300 0500
> 0300 0300 2: 209C970C000000D7 0200 0700 0200 0000 3: 204E8D0C000000BC
> 0200 1800 0300 0000 4: 20598D0C00000062 0400 0700 0400 0300 5:
> 20B9980C000000E5 0300 0300 0300 0000 6: 20D7710C000
> 0001C 0300 1100 0400 0000 7: 202F860C00000038 0300 0600 0400 0000


mal davon abgesehen, dass der \n offensichtlich keinen Zeilenvorschub 
macht ( \r\n verwenden), sieht das doch eigentlich so aus, wie es 
aussehen soll.

mit korrektem Umbruch würde es so aussehen
1
0: 20F0790C00000011 0300 0900 0400 0000 
2
1: 20588D0C00000055 0300 0500 0300 0300 
3
2: 209C970C000000D7 0200 0700 0200 0000
4
3: 204E8D0C000000BC 0200 1800 0300 0000 
5
4: 20598D0C00000062 0400 0700 0400 0300 
6
5: 20B9980C000000E5 0300 0300 0300 0000
7
6: 20D7710C0000001C 0300 1100 0400 0000 
8
7: 202F860C00000038 0300 0600 0400 0000

und ich kann da nichts entdecken, wo die Ausgabe offensichtlich falsch 
wäre.

von oliver (Gast)


Lesenswert?

Hallo
Meine Ausgabe sieht so aus:Mit einem Zeilenvorschub nach dem 6.Ausagbe


0: 20F0790C00000011 0300 0900 0400 0000
1: 20588D0C00000055 0300 0500 0300 0300
2: 209C970C000000D7 0200 0700 0200 0000
3: 204E8D0C000000BC 0200 1800 0300 0000
4: 20598D0C00000062 0400 0700 0400 0300
5: 20B9980C000000E5 0300 0300 0300 0000
6: 20D7710C000
0001C 0300 1100 0400 0000 7: 202F860C00000038 0300 0600 0400 0000

aber ich möchte das Ergebis so haben: ohne Zeilenvorschub

0: 20F0790C00000011 0300 0900 0400 0000 1: 20588D0C00000055 0300 0500 
0300 0300 2: 209C970C000000D7 0200 0700 0200 0000 3: 204E8D0C000000BC 
0200 1800 0300 0000 4: 20598D0C00000062 0400 0700 0400 0300 5: 
20B9980C000000E5 0300 0300 0300 0000 6: 20D7710C0000001C 0300 1100 0400 
0000 7: 202F860C00000038 0300 0600 0400 0000
danke

von Karl H. (kbuchegg)


Lesenswert?

oliver schrieb:
> Hallo
> Meine Ausgabe sieht so aus:Mit einem Zeilenvorschub nach dem 6.Ausagbe

Wo gibst du aus?

Kann natürlich auch sein, dass der ungewollte Zeilenvorschub von deinem 
Terminalprogramm kommt, welches nach einer 255 Zeichen Zeile einen 
Umbruch einfügt.

> 0: 20F0790C00000011 0300 0900 0400 0000
> 1: 20588D0C00000055 0300 0500 0300 0300
> 2: 209C970C000000D7 0200 0700 0200 0000
> 3: 204E8D0C000000BC 0200 1800 0300 0000
> 4: 20598D0C00000062 0400 0700 0400 0300
> 5: 20B9980C000000E5 0300 0300 0300 0000
> 6: 20D7710C000
> 0001C 0300 1100 0400 0000 7: 202F860C00000038 0300 0600 0400 0000
>
> aber ich möchte das Ergebis so haben: ohne Zeilenvorschub
>
> 0: 20F0790C00000011 0300 0900 0400 0000 1: 20588D0C00000055 0300 0500
> 0300 0300 2: 209C970C000000D7 0200 0700 0200 0000 3: 204E8D0C000000BC
> 0200 1800 0300 0000 4: 20598D0C00000062 0400 0700 0400 0300 5:
> 20B9980C000000E5 0300 0300 0300 0000 6: 20D7710C0000001C 0300 1100 0400
> 0000 7: 202F860C00000038 0300 0600 0400 0000


Schau dir die Übertragung auf Bytebene an und entscheide, wer den 
Umbruch macht. In deinem Programm gibt es dafür keinen Grund. Von daher 
halte ich dein Anzeigeprogramm für den Übeltäter.

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.