ich habe mein problem weiter lokalisiert, weiß jetzt aber nicht, wie ich
es umgehen kann.
ich habe eine große anzahl von #definitin für jede menge kleine aufgaben
1 | uint8_t reg;
|
2 | uint8_t a[10];
|
3 | uint16_t b[10];
|
4 |
|
5 | #define load(val) reg=val;
|
6 | #define free(val) val=0;
|
7 | #define fill(val) val=0xff;
|
8 | #define adce(val) if(val < 300) val++;else val=0; //nur für 16b vars!!!
|
9 | ...
|
jetzt greife ich auf diese wie oben schon besprochen zu.
1 | #define u8 0
|
2 | #define u16 1
|
3 |
|
4 | void* VAR(uint8_t var_type, uint8_t var)
|
5 | {
|
6 | switch(var_type)
|
7 | {
|
8 | case u8: return &a[var];
|
9 | break;
|
10 | case u16: return &b[var];
|
11 | break;
|
12 | default: return NULL;
|
13 | break;
|
14 | }
|
15 | }
|
das funktioniert auch ohne probleme.
aber wenn ich sie wie folgend aufrufe...
1 | #define LOAD 1
|
2 | #define ADCE 2
|
3 | void PARSER(uint8_t func, uint8_t var_type, uint8_t var)
|
4 | {
|
5 | switch(func)
|
6 | {
|
7 | case LOAD: load(*((uint8_t*)VAR(var_type,var)));
|
8 | break;
|
9 | case ADCE: adce(*((uint16_t*)VAR(var_type,var)));
|
10 | break;
|
11 | default: break;
|
12 | }
|
13 | }
|
...bricht der comiler bei "adce(*((uint16_t*)VAR(var_type,var)));" ab
mit den meldungen
warning: use of cast expressions as lvalues is deprecated
error: invalid lvalue in increment
es muss irgendetwas mit #define zu tun haben... scheinbar kann ich nur
8bit variablen übergeben. habe ich damit recht? kann ich das umgehen?
compiler: gcc 3.4.5 mingw