Uart problem

Gast #170590
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
Gast #170591
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
Gast #170592
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;
}
Gast #170593
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?
Gast #170594
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

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