Diese Warnung bringt er gerne, wenn man mit Pointer arbeitet, das sagt garnix.
Übrigens: es ist nicht notwendig, aus den Pointer das DDRx Register zu ermitteln: Alle IO Register haben die gleiche struktur
Code:
typedef struct {
uint_8_t Pin; // in
uint_8_t Ddr; // control
uint_8_t Port; // out
} IO_REG;
// Aufruf
outSet((IO_REG*)&Pinb, 3, 1 )
uint8_t outSet(IO_REG* port, uint8_t pin, uint8_t level)
{
port->Ddr |= (1 << pin); // DDR auf Output
if (level)
port->Port |= (1 << pin); // Port.pin = 1
else
port->Port &= ~(1 << pin); // Port.pin = 0
return level;
}
Eventuell mit ausreichend "volatile"s beflastern
Lesezeichen