Forum: Mikrocontroller und Digitale Elektronik Uart problem


von Michael (Gast)


Lesenswert?

hallo zusammen!

hab ein kleines prblem mit meinem uart vom amega8 den ich in winavr
programmiere:

wenn ich vom pc aus zeichen an meinen µc sende und die in einen puffer
schreibe, emfange ich als erstes zeichen immer 0 dafür fehlt mit das
letzte zeichen.
beispiele: ich schicke "test"
           ich empfange "0tes"

wo bekomme ich das letze zeichen her? im UDR steht noch das "s"

gruß michael

von Tom (Gast)


Lesenswert?

Hi

Meine Kristallkugel sagt mir, dass du die Daten aus dem
Zwischenspeicher liesst, bevor diese hinein geschrieben wurden.
Initialisiere mal den Speicher mit 'a' und schau, ob du dann "ates"
bekommst ;-).

HTH

Tom

von Michael (Gast)


Lesenswert?

hallo tom,

hab das mal so gemacht wie du gesagt hast.
ergebniss: "0tes"

hier mal ein auszug aus meinem programm
speicher soll ein ringbuffer sein, zeichenempfangen der zeiger.

signal (sig_uart_recv)
{
  zeichenempfangen++;
  if(zeichenempfangen>49)
    zeichenempfangen=0;
  speicher[zeichenempfangen]=udr;
}

von A.K. (Gast)


Lesenswert?

Und wenn Du nun "zeichenempfangen" Bytes ab "speicher[0]" ausgibst,
dann kommt als 1. Zeichen Müll und das letzte fehlt. Weil das erste
Zeichen nach [1] geschrieben wird.

Hier also: erst reinschreiben, dann inkrementieren.

Andere Frage: bist Du sicher das Du da keinen Ringpuffer brauchst?

von Michael (Gast)


Lesenswert?

hey, na klar!

jetzt funzt es, super danke!!

a.k.
Andere Frage: bist Du sicher das Du da keinen Ringpuffer brauchst?

verstehe deine frage leider nicht, hab doch gesagt das ich speicher als
ringbuffer verwende. das hier war jedoch nur zu testen, den buffer
brauche ich erst später.

danke nachmals

michael

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.