Hallo Gemeinde,
ich möchte gern ein Array komfortabel initialisieren. Die zu Fuß Methode
ist, einzelne Bits in 32 Bit Werten zu setzen, alles andere als inuitiv.
Deutlich besser ist es, per #define und Bitgeschiebe das zu machen.
Schon deutlich besser, aber noch nicht wirklich komfortabel. Denn man
muss immer noch den Offset richtig zum Port zuordnen. Ideal wäre es, ein
Macro in der Art zu haben.
1
#define pattern(port, bit) (
2
if(port==PORTA)return(1L<<(bit+24));
3
if(port==PORTB)return(1L<<(bit+16));
4
if(port==PORTC)return(1L<<(bit+8));
5
if(port==PORTD)return(1L<<(bit+0));
Ich weiß, das ist KEIN funktionierendes Macro, es geht ums Prinzip. Geht
das überhaupt? Oder wird da das Macrokonzept überfordert?
MFG
Falk
>#define enc_pattern(port, bit) ((port==PORTA) ? (1L<<(bit+24)) : 0)
Versuchs doch mal so
#define enc_pattern(port, bit) ((port==&PORTA) ? (1L<<(bit+24)) : 0)
Aufruf dann halt entsprechend
enc_pattern(&PORTA, bit)
port==PORTA vergleicht den Inhalt von PORTA mit port.
Den kann der Compiler aber nicht wissen;)
@ Fabian O. (xfr)
>Wobei sich dann die Frage stellt, wozu Du überhaupt das Array brauchst
Für eine frei konfigurierbare Zuweisung von PWM-Kanälen zu IO-Pins für
eine Soft-PWM.