Moin,
warum sind eigentlich alle Ports, Pins und Register in der AVR-libc
folgendermaßen definiert:
1 | /* DDRC */
|
2 | #define DDC7 7
|
3 | #define DDC6 6
|
4 | #define DDC5 5
|
5 | #define DDC4 4
|
6 | #define DDC3 3
|
7 | #define DDC2 2
|
8 | #define DDC1 1
|
9 | #define DDC0 0
|
im Code soll man das dann z.B. so nutzen:
1 | DDRC = (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 << DDC4);
|
Das soll dann laut AVR-GCC-Tutorial "übersichtlich und selbsterklärend"
sein.
hingegen soll "unübersichtlich" sein.
Das es auch so geht wird gar nicht erwähnt.
Würde man es in der AVR-libc direkt so definieren:
1 | /* DDRC */
|
2 | #define DDC7 128
|
3 | #define DDC6 64
|
4 | #define DDC5 32
|
5 | #define DDC4 16
|
6 | #define DDC3 8
|
7 | #define DDC2 4
|
8 | #define DDC1 2
|
9 | #define DDC0 1
|
dann könnte man es noch viel übersichtlicher und mit relativ wenig
Tipparbeit so schreiben:
1 | DDRC = DDC0 | DDC1 | DDC2 | DDC3 | DDC4;
|
Ich frage mich, warum das trotzdem so umständlich gemacht wird. Ist es
ohne die Shiftoperatoren nicht elitär genug, oder gibt es dafür einen
richtigen Grund?
Gruß,
Thomas