Gast
#181832
Ich möchte gerne eine funktion schreiben, die mir an einem beliebigen
Port einen beliebigen Pin invertiert. Meine Idee hierzu ist:
void invert_pin (uint8_t * PINX, uint8_t * PORTX, uint8_t pin) {
if (*PINX & (1 << pin))
*PORTX &= ~(1 << pin);
else
*PORTX |= (1 << pin);
}
Doch leider entsteht beim Compilieren immer die Warnung
warning: passing arg 1 of `invert_pin' discards qualifiers from
pointer target type
warning: passing arg 2 of `invert_pin' discards qualifiers from
pointer target type
wenn ich die Funktion mit
invert_pin (&PIND, &PORTD, 0);
aufrufe. Von welchem Typ sind denn die Ports und neben bei gefragt:
Kann ich das Invertieren nicht auch mit dem ~ - Operator realisieren.
Das hat bei mir aber nur geklappt, wenn ich einen kompletten Port
invertieren wollte.
Wie hängen eigentlich PinD und PortD zusammen? Kann man es irgendwie
erreichen, dass nur ein Parameter dafür nötig ist. So ist es doch
irgendwie doppelt gemoppelt.