Etwas verhübschen oder zumindest beschleunigen könnte man
die Sache, indem man nicht die Bits nach rechts schiebt (was
Zeit kostet), sondern nur gegen 0 testet.
Das sollte schneller gehen, z.B. statt:
1 | addr |= ( ( (PIND & (1<<PD7)) >>PD7) <<8);
|
besser:
1 | addr |= ( ( (PIND & (1<<PD7)) !=0) <<8);
|
Noch etwas beschleunigen könnte man alles, wenn man
auf die vielen einzelnen Shifts um mehrere Stellen
verzichtet und stattdessen immer nur um 1 schiebt, das
geht schneller:
1 | addr = -2; // binaer: ....1111110
|
2 |
|
3 | addr |= ( (PIND & (1<<PD7)) !=0);
|
4 | addr <<= 1;
|
5 | addr |= ( (PIND & (1<<PD6)) !=0);
|
6 | addr <<= 1;
|
7 | addr |= ( (PIND & (1<<PD5)) !=0);
|
8 | addr <<= 1;
|
9 | addr |= ( (PINC & (1<<PC0)) !=0);
|
10 | addr <<= 1;
|
11 | addr |= ( (PINC & (1<<PC1)) !=0);
|
12 | addr <<= 1;
|
13 | addr |= ( (PINC & (1<<PC2)) !=0);
|
14 | addr <<= 1;
|
15 | addr |= ( (PINC & (1<<PC3)) !=0);
|
16 | addr <<= 1;
|
17 | addr |= ( (PINC & (1<<PC4)) !=0);
|
18 | addr <<= 1;
|
19 | addr |= ( (PINC & (1<<PC5)) !=0);
|
20 |
|
21 | // Setzen der oberen Bits zu 1 entfällt wg. Initialisierung...
|
Wenn ich mich nicht vertan habe, sollte dasselbe rauskommen.