#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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.