Ich habe hier ein "Problem", welches bestimmt kein größeres ist.
Ich arbeite in Atmel Studio 7 und auf einem MEga32u4 und komme irgendwie
mit den Präprozessor Abfragen nicht so klar. Hintergrund: Es gibt die
Software für den µC welchen es aber in zwei verschiedenen Ausführungen
gibt (Mit unterschiedlichen Anzeigeelementen). Die Software ist aber im
Grunde die gleiche, so das sich zwei unterschiedliche Projekte nicht
lohnen.
Momentan habe ich es mit ner normalen If Abfrage gelößt, was aber im
Grunde quark ist, da der jeweils andere Code auf dem µC sinnlos ist, da
nie gebraucht:
1 | void SetGearPosition(uint8_t Gear)
|
2 | {
|
3 |
|
4 | if (ucVersion == 0)
|
5 | {
|
6 | DDRB &= ~(1<<4);
|
7 | DDRD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<7));
|
8 | DDRE &= ~(1<<6);
|
9 |
|
10 | switch (Gear)
|
11 | {
|
12 | case 0:
|
13 | DDRB |= (1<<4);
|
14 | break;
|
15 | case 1:
|
16 | DDRE |= (1<<6);
|
17 | break;
|
18 | case 2:
|
19 | DDRD |= (1<<7);
|
20 | break;
|
21 | case 3:
|
22 | DDRD |= (1<<4);
|
23 | break;
|
24 | case 4:
|
25 | DDRD |= (1<<0);
|
26 | break;
|
27 | case 5:
|
28 | DDRD |= (1<<1);
|
29 | break;
|
30 | case 6:
|
31 | DDRD |= (1<<2);
|
32 | break;
|
33 | default:
|
34 | break;
|
35 | }
|
36 | }
|
37 |
|
38 | if (ucVersion == 1)
|
39 | {
|
40 | if(Gear >= 0 && Gear <= 9)
|
41 | {
|
42 | DracoMAX7219_send(Gear);
|
43 | }
|
44 | }
|
45 | }
|
Wenn ich dies aber mit Präprozessorabfragen versuche, schlage ich aber
fehl (Ich muss zugeben das ich das auch vorher nie gemacht habe):
1 | #define __DracoV0_ 1
|
2 | #define __DracoV1_ 0
|
3 |
|
4 | //...
|
5 |
|
6 | void SetGearPosition(uint8_t Gear)
|
7 | {
|
8 |
|
9 | #ifdef __DracoV0_
|
10 |
|
11 | DDRB &= ~(1<<4);
|
12 | DDRD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<7));
|
13 | DDRE &= ~(1<<6);
|
14 |
|
15 | switch (Gear)
|
16 | {
|
17 | case 0:
|
18 | DDRB |= (1<<4);
|
19 | break;
|
20 | case 1:
|
21 | DDRE |= (1<<6);
|
22 | break;
|
23 | case 2:
|
24 | DDRD |= (1<<7);
|
25 | break;
|
26 | case 3:
|
27 | DDRD |= (1<<4);
|
28 | break;
|
29 | case 4:
|
30 | DDRD |= (1<<0);
|
31 | break;
|
32 | case 5:
|
33 | DDRD |= (1<<1);
|
34 | break;
|
35 | case 6:
|
36 | DDRD |= (1<<2);
|
37 | break;
|
38 | default:
|
39 | break;
|
40 | }
|
41 | #endif //__DracoV0_
|
42 |
|
43 |
|
44 |
|
45 | #ifdef __DracoV1_
|
46 |
|
47 | if(Gear >= 0 && Gear <= 9)
|
48 | {
|
49 | DracoMAX7219_send(Gear);
|
50 | }
|
51 | #endif //__DracoV1_
|
52 | }
|
Er springt dennoch durch beide Zweige und kompiliert auch alle beide
zweige. Jemand einen Rat?!