Hallo,
ich möchte gern ein Programm vom Atmega 328 zum ESP8266 portieren.
Leider arbeite ich nicht so oft mit C++ und verstehe den Quellcode nicht
vollständigt. Kann mir jemand dabei auf die Sprünge helfen?
Es geht um folgenden Code.
1 | #define portOfPin(P)\
|
2 | (((P)>=0&&(P)<8)?&PORTD:(((P)>7&&(P)<14)?&PORTB:&PORTC))
|
3 | #define ddrOfPin(P)\
|
4 | (((P)>=0&&(P)<8)?&DDRD:(((P)>7&&(P)<14)?&DDRB:&DDRC))
|
5 | #define pinOfPin(P)\
|
6 | (((P)>=0&&(P)<8)?&PIND:(((P)>7&&(P)<14)?&PINB:&PINC))
|
7 | #define pinIndex(P)((uint8_t)(P>13?P-14:P&7))
|
8 | #define pinMask(P)((uint8_t)(1<<pinIndex(P)))
|
9 |
|
10 | #define pinAsInput(P) *(ddrOfPin(P))&=~pinMask(P)
|
11 | #define pinAsInputPullUp(P) *(ddrOfPin(P))&=~pinMask(P);digitalHigh(P)
|
12 | #define pinAsOutput(P) *(ddrOfPin(P))|=pinMask(P)
|
13 | #define digitalLow(P) *(portOfPin(P))&=~pinMask(P)
|
14 | #define digitalHigh(P) *(portOfPin(P))|=pinMask(P)
|
15 | #define isHigh(P)((*(pinOfPin(P))& pinMask(P))>0)
|
16 | #define isLow(P)((*(pinOfPin(P))& pinMask(P))==0)
|
17 | #define digitalState(P)((uint8_t)isHigh(P))
|
So wie ich das verstehe, wird hier Anhand des Pins der Port (B,C oder D)
zugeordnet (z.B. PORTB=(1<<PB2)). So wie ich das verstanden habe, ist
beim ESP8266 dies nicht notwendigt, da jeder Port direkt zugeordnet ist.
https://github.com/esp8266/Arduino/blob/master/doc/reference.md#digital-io
Daher dachte ich, ich mache das einfach so:
1 | #define portOfPin(P)
|
2 | #define ddrOfPin(P)
|
3 | #define pinOfPin(P)
|
4 | #define pinOfPin(P)
|
5 | #define pinIndex(P)((uint8_t)(P>13?P-14:P&7))
|
6 | ...
|
Aber das funktioniert leider nicht.
Habe ich da was falsch verstanden?