Hallo,
ich würde gern eine Sendefunktion basteln, die über den UART ein paar
Bytes versendet. Dazu gehören immer Startbytes, Endbytes eine Checksumme
usw, darum soll sich die Senderoutine kümmern, ich möchte lediglich die
eigentlichen Daten übergeben.
stdarg.h gefällt mir, weil ich gerne einige feste Datenblöcke mit
defines definieren möchte. Es soll so in der Art aussehen:
#define FUNKTION_X 3, 0x23, 0x56
#define TASTE1 0x34
sende(FUNKTION_X, TASTE1);
Es soll dann folglich (3, 0x23, 0x56, 0x34) übergeben werden. Das lezte
Byte ist hierbei nicht immer fest sondern wird teilweise berechnet
wohingegen der vordere Teil fest bleibt.
Folgendes habe ich versucht:
1 | void send (unsigned char length, ...) {
|
2 | unsigned char bcc;
|
3 | va_list pointer;
|
4 | unsigned char data;
|
5 | unsigned char i;
|
6 |
|
7 | va_start(pointer, length);
|
8 |
|
9 | ...
|
10 |
|
11 | for(i=1; i<=length; i++) {
|
12 | data = va_arg(pointer, unsigned char);
|
13 | UARTSendChar(data);
|
14 | ....
|
15 | };
|
16 |
|
17 | ...
|
18 |
|
19 | va_end(pointer);
|
20 | };
|
Das ergibt dann beim Übersetzen leider folgende Ausgabe:
107: warning: 'unsigned char' is promoted to 'int' when passed through
'...'
107: warning: (so you should pass 'int' not 'unsigned char' to 'va_arg')
107: note: if this code is reached, the program will abort
Ist es nicht möglich unsigned chars mit diesem Mechanismus zu übergeben?
Vielen Dank schonmal
Gruß Philipp