#define problem

OP #2116889
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
Moderator Persönliche Seite #2116900
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

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