Variable Argumenten Liste formatiert fehlerhaft?

Gast #2047827
Lesenswert?

Hallo.

Ich habe folgenden Code der bisher (ATMega128) immer funktioniert hat:
1
void RS232_SendLine(char* dat, ...)
2
{
3
  va_list xdata ap;
4
  char xdata buf[256]; 
5

6
  va_start(ap, dat);
7

8
  vsprintf(buf, dat, ap);
9

10
  va_end(ap);
11

12
    UART_Send(buf);
13
}
Jetzt wollte ich dieselbe Funktion für einen AT89c51ac3 benutzen.
Aber schon die erste Debugausgabe ist fehlerhaft.

Bei der Ausgabe von
1
unsigned int i;
2

3
for(i = 0; i<100; i++)
4
{
5
    RS232_SendLine("Hello World\r\n");
6
    RS232_SendLine("%u\r\n",i);
7
}

wird bei den Zahlenwerten 256,512,768,1024, usw. ausgegeben, was den 
Hexadezimal zahlen von    100,200,300,400 entspricht.

Im Debugmodus von Keil konnte ich erkennen dass der string schon falsch 
durch va_start(ap, dat); interpretiert wird. in *ap steht aber die 
richtige Zahl (1 Byte).

Meine Vermutung ist das statt 1 Byte 2 Bytes ausgelesen werden.

Hat jemand eine Idee woran es liegen könnte?


Danke Harald

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