www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik #define problem


Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht 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:
#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
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTC0_DRE_gc

Oder auch über eine #if abfrage.
#if USART==USARTC0
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTC0_DRE_gc
#elif USART==USARTD0
#define DMA_TRIG_SEND    DMA_CH_TRIGSRC_USARTD0_DRE_gc
.....
#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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans W. schrieb:
> Ich möchte mit der Anweißung:

Was ist das?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
#define USART                    USARTC0
#define DMA_CH(a,b,c)    a##b##c
#define DMA_TRIG_SEND    DMA_CH(DMA_CH_TRIGSRC_,USART,_DRE_gc)

DMA_TRIG_SEND

ergibt mit gcc -E:
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "foo.c"




DMA_CH_TRIGSRC_USART_DRE_gc

Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans W. (hans_w30)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank ging ja wirklich schnell.

Gruß Hans

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.