Forum: Mikrocontroller und Digitale Elektronik Variable Argumenten Liste formatiert fehlerhaft?


von Harald (Gast)


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

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.