Ich habe eine Frage:
Ich muss den Port eines Atmels in einer Funktion übergeben (dient als CS
bei SPI).
Das habe ich gemacht wie im GCC-Tutorial.
Also :
void fkt(volatile uint8_t *port, uint8_t pin)
{
*port &= ~(1<<pin);
}
fkt(&PORTB, PB2);
So weit so gut...
Nun möchte ich der Übersicht wegen bei mehreren Slaves die Geräte mit
structs initialisieren und nur noch diesen übergeben müssen.
Ungefähr so:
typedef struct
{
volatile uint8_t *port;
uint8_t pin;
} TsFlash;
void initTsFlash(TsFlash *sFlash, volatile uint8_t *port, uint8_t pin)
{
sFlash -> port = port;
sFlash -> pin = pin;
}
Main
{
TsFlash serialFlash;
initTsFlash(&serialFlash, &PORTB, PB2);
}
Jetzt die Frage, wie ich die Zeile programmiertechnisch in der Funktion
fkt() richtig umsetzte.
Der Compiler akzeptiert folgende 4 Varianten:
void fkt(TsFlash *sFlash)
{
*sFlash -> port &= ~(1 << sFlash -> pin);
(*sFlash -> port) &= ~(1 << sFlash -> pin);
sFlash -> port[0] &= ~(1 << sFlash -> pin);
(*(*sFlash).port) &= ~(1 << sFlash -> pin);
}
Sind die alle gleich und überhaupt richtig ?
Wenn ja, welche wäre die eleganteste ?
Gruß Micha