Forum: Mikrocontroller und Digitale Elektronik #define problem


von Hans W. (hans_w30)


Lesenswert?

Hy,
Ich möchte über eine define Anweißung eine Konstante verändern.
Damit ich nicht so viel von Hand machen muss.

Ich möchte mit der Anweißung:
1
#define USART                    USARTC0
eine Define beeinflussen.
Entweder wenn das irgendwie geht.
Über eine Define in der dann das USARTC0 ersetzt wird mit z.b. USARTD0
1
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTC0_DRE_gc

Oder auch über eine #if abfrage.
1
#if USART==USARTC0
2
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTC0_DRE_gc
3
#elif USART==USARTD0
4
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTD0_DRE_gc
5
.....
6
#endif
USARTC0 wiederum ist mittels #define als Zeiger definiert, welcher auf 
0x8A0 zeigt. In einer #if Abfrage kann ich nur Integer vergeleichen.
Jemand eine Idee wie ich das realisieren kann?

Gruß Hans

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hans W. schrieb:
> Ich möchte mit der Anweißung:

Was ist das?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Hans W. schrieb:
>> Ich möchte mit der Anweißung:
>
> Was ist das?

Na, eine Handlung, die etwas weiß macht.  Also mit weißer Farbe
anstreicht. :-)

Das Problem lässt sich durch den Verkettungoperator ## lösen:
1
#define USART                    USARTC0
2
#define DMA_CH(a,b,c)    a##b##c
3
#define DMA_TRIG_SEND    DMA_CH(DMA_CH_TRIGSRC_,USART,_DRE_gc)
4
5
DMA_TRIG_SEND

ergibt mit gcc -E:
1
# 1 "foo.c"
2
# 1 "<built-in>"
3
# 1 "<command line>"
4
# 1 "foo.c"
5
6
7
8
9
DMA_CH_TRIGSRC_USART_DRE_gc

von Hans W. (hans_w30)


Lesenswert?

Sorry ist eine Makro-Funktion bzw. eine Präprozessor Anweißung.
Ich möchte das für den XMega benutzen, da ich gerade versuche mir da ne 
kleine HAL zu basteln

von Hans W. (hans_w30)


Lesenswert?

Vielen Dank ging ja wirklich schnell.

Gruß Hans

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hans W. schrieb:
> Vielen Dank ging ja wirklich schnell.

Dafür schreibst du jetzt 30mal das Wort

Anweisung

auf, damit wir das nächste Mal nicht wieder die weiße Farbe
rausholen müssen. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.