#define Frage

OP #1807756
Lesenswert?

N'abend,

folgendes Szenario:
1
uint8_t PD0;
2
uint8_t P0;
3

4
...
5
#define PORT_0        PD0,  P0 
6

7
#define IO_PORT_WRITE(x)                     IO_PORT_WRITE2(x)
8
#define IO_PORT_WRITE3(ddr, port, value)      port = value
9

10
...
11
IO_PORT_WRITE(PORT_0, 0xFF);


macro argument error ... sagt er

Warum haut das nicht hin?
Bronko
Moderator #1807820
Lesenswert?

> Doppelt hält besser oder was?

Beim C-Präprozessor mit seinen nicht ganz einfachen Expansionsregeln
muss man manchmal etwas doppelt machen, das ist schon ok.

Ich frage mich aber trotzdem, wozu das gut sein soll, zumal das erste
Argument von IO_PORT_WRITE2 gar nicht benutzt wird.
OP #1807832
Lesenswert?

OK, weils euch interessiert. Ziel war es eine möglichst effektive IO pin 
Abstraktion für alle uC, die ich programmiere, zu haben. D,h. folgende 
Zeile funktioniert sofort beim AVR, PIC, R8C, ..., weil das Makro in 
einem Headerfile z.B. io.h ist und ich somit nur noch das Macro anfassen 
muss und dessen Argument, das restliche Programm bleibt unverändert.

IO_PORT_WRITE(PORT_0, 0xFF);

Das mit inline ist mir bekannt und ist auch die "bessere" Lösung. Das 
inline ist unter Umständen compilerspezifisch.

Gruß
Bronko

PS: Das zweite Argument ist für das dataDirektion Makro gut
    Es gibt noch weitere Makros

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren