...und dabei alle anderen PORTA überheinern, die nix damit zu tun haben. Niemand wird ernsthaft "PORTA" oder ähnliches direkt benutzen. EinZitat von Felix G
#define EIERSALAT PORTA
reicht idR nicht aus. Wenn, dann ist angesagt
#define EIERSALAT_PORT PORTA
#define EIERSALAT_PIN PINA
#define EIERSALAT_DDR DDRA
#define EIERSALAT_BIT 5
// oder
#define EIERSALAT_MASK (1<<5)
EIERSALAT_PORT &= ~EIERSALAT_MASK;
EIERSALAT_PORT &= ~(1 << EIERSALAT_BIT);
if (bit_is_set (EIERSALAT_PIN, EIERSALAT_BIT)) {...}
Mir ist durchaus bewusst, daß man C programmieren kann ohne einen Präprozessor zu benutzen oder Makros zu definieren.Zitat von Felix G
Meine Makros find ich auch recht fett. Das ist mir aber inzwischen egal, ich benutz die schon lange und auf verschiedenen AVRs und musste seither nix mehr dran ändern.
For allem dann ist's praktisch, wenn es viele Ports sind und ich mit Port-Expandern arbeite. Bei über 50 Ports wird's dann schnell unübersichtlich... Umstellen von einem physikalischen Port auf einen via Expander oder zurück ändert nix an der C-Quelle, sondern nur in der Zuweisung einer anderen Port-Konstanten
Gleichzeitig produzieren die Makros vorbildlich dichten Code.
Daß Programmierstil Geschmackssache ist, steht natürlich ausser Frage.
Zugegebenermassen würd mir so was wie
#define PORT_TASTER PORTD.3
PORT_TASTER.DDR = 0; // als IN
PORT_TASTER.PORT = 1; // mit Pullup
if (0 == PORT_TASTER.PIN) ..., was der OP im Sinn hatte, auch nicht schlecht gefallen, und es war die Motivation, ähnliche Konstrukte zu realisieren.
Lesezeichen