Toby schrieb:
> ich habs jetzt so gemacht und es funktioniert:
Gut,
Und wenn du jetzt noch deinen 'magischen Konstanten' 0x01, 0x02 ein paar
schöne Makrokonstanten spendierst, dann kann man das auch leicht auf
andere Pinbelegungen vom µC anpassen. Anstatt i noch einen vernünftigen
Variablennamen nehmen (Frage: Was bedeuten die Bits in dieser Variable?
Antwort: Das sind die Pins die sich verändert haben. Also sollte man
dann auch einen Namen wählen, der das ausdrückt)
1 | #define RX_KANAL_1 PB0
|
2 | #define RX_KANAL_2 PB1
|
3 | #define RX_KANAL_3 PB2
|
4 |
|
5 | ....
|
6 |
|
7 | pinsChanged = pinsNow ^ pinsPrevious;
|
8 |
|
9 | if( pinsChanged & (1<<RX_KANAL_1) )
|
10 | {
|
11 | if (pinsNow & (1<<RX_KANAL_1)
|
12 | {
|
13 | timerValue[0] = timer;
|
14 | }
|
15 | else
|
16 | {
|
17 | channel[0] = timer - timerValue[0];
|
18 | }
|
19 | }
|
20 |
|
21 | if( pinsChanged & (1<<RX_KANAL_2) )
|
22 | {
|
23 | if (pinsNow & (1<<RX_KANAL_2)
|
24 | {
|
25 |
|
26 | ...
|
liest sich doch gleich viel besser. Je weniger man beim Code lesen
erraten oder sich merken muss, umso besser. Im Idealfall ist der Code
schon fast ein vollständiger Satz, dem lediglich ein paar Füllwörter
fehlen.
wenn sich der Pin gändert hat, an dem der RC Kanal 1 hängt
if( pinsChanged & (1<<RX_KANAL_1) )
Ist fast die gleiche Information, nur das das eine ein deutscher Satz
ist und das andere dasselbe in C ausdrückt.