RS232 Integer lesen (C)

Gast #2558614
Lesenswert?

Hallo Gemeinde,

ich möchte einen AVR mit meinem Linux-PC per RS232 kommunizieren lassen.
Mit ASCII-Daten hat das auch halbwegs funktioniert, ich möchte aber 
Messwerte direkt als INT versenden/lesen und da hakt es irgendwie!

folgendes sendet der AVR:
1
void uart_putint (uint32_t data)  
2
{
3
  while (data >= 0)
4
  {
5
    while (!(UCSRA & (1<<UDRE)))
6
    {
7
    }
8
    UDR = data;
9
    data = data >> 8;
10
    }
11
}
12
/********************/
13

14
uart_putint(0x01234567);

So empfängt der PC:
1
int res,tr;
2
char BufferRX[16];
3
while(1)                 
4
  {
5
  res=read(fd232,BufferRX,4);
6
  printf("Read:%i %s\n",res,BufferRX);
7
  sscanf(BufferRX,"%04c",&tr);
8
  printf("ITP: %04x\n",tr);
9
  sleep(1);
10
  }

Starte ich das Programm auf dem PC bekomme ich folgende Ausgabe:
Read:4 gE#
ITP: 1234567

Aber nur beim 1. starten des Programms. Beim 2. mal nur noch dies:
Read:4
ITP: 0000

Um wieder richtige Werte zu bekommen muss ich erst den AVR neu starten,
wobei dieser doch immer das selbe sendet.

Wie kann ich dies eleganter Lösen, was mache ich falsch?
Noch andere Ideen?


Vielen Dank und Gruß,
Thomas

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