Autsch.
Da waren die Spezialisten am Werk :-)
Also.
Wie du wahrscheinlich schon mitbekommen hast, gibt es natürlich eine
C-Standard-Funktion die ultoa heißt.
An der gibt es nichts zu rütteln, die ist bereits vorhanden.
Extrem dämlich ist es nun, sich selbst eine Funktion gleichen Namens,
allerdings mit anderer Parameterliste zu machen. Dafür sollte einem mit
dem nassen Fetzen eine über die Rübe gezogen werden.
Aber hilft nichts. Du hast das nicht verbockt und irgendwie musst du da
jetzt rauskommen.
Der Ansatz, das ganze über compilerspezifische #define zu lösen, ist
schon mal ein Fuss in der Tür. Im Grunde musst du dem Code nur noch
beibringen, dass er die ganze Sache hier regeln kann, wie beim HI_TECH_C
Compiler. Der gcc (den hast du doch?) bringt schon ein ultoa mit, so
dass derselbe 'Fix' greift.
_GNUC_ sollte vom Compiler schon vordefiniert sein, so dass man die
Umgehung an diesem #define aufhängen kann.
Also die helpers.h abändern
1 | #if !defined(__18CXX) || defined(HI_TECH_C) || defined(__GNUC__)
|
2 | char *strupr(char* s);
|
3 |
|
4 | #if defined(HI_TECH_C) || defined(__GNUC__)
|
5 | // HI-TECH PICC-18 PRO 9.63 seems to already have a ultoa() library
|
6 | // function, but the parameter list is different!
|
7 | #define ultoa(val,buf) ultoa((buf),(val),10)
|
8 | #else
|
9 | void ultoa(DWORD Value, BYTE* Buffer);
|
10 | #endif
|
11 | #endif
|
die helpers.c abändern in
1 | #if !defined(__18CXX) && !defined(HI_TECH_C) && !defined(__GNUC__)
|
2 | void ultoa(DWORD Value, BYTE* Buffer)
|
3 | {
|
4 | BYTE i;
|
5 | DWORD Digit;
|
6 | DWORD Divisor;
|
7 | BOOL Printed = FALSE;
|
8 |
|
9 | if(Value)
|
10 | {
|
11 | ....
|
Es ist zwar ein grauslicher Hack, denn eigentlich sollte die hier
benutzte Funktion in erster Linie gar NICHT ultoa heißen, aber um die
Demo zu komplilieren sollte es erst mal reichen.