Iteration über mehrere #defines

Gast #1849514
Hallo zusammen!
Ich muss in meine Firma einen Treiber für µC programmieren. Die 
Codingrichtlinien besagen - Registeradressen müssen per #define angelegt 
werden.So:
#define SCI_SCI0BDL_ADR_UI16  (uint16)0x00C9

Ich habe 11 davon pro Hardwaremodul, insgesamt 6 module.
Um auf die einzelnen Register zuzugreifen, wird eine Struktur mit 
Pointern angelegt. 6 Strukturen werden in einem Array abgelegt.

Nun müssen die Pointer auf die Register "umgelenkt" werden, dafür gebe 
ich den die Adresse aus #define.

Ich bin noch bereit das 11 mal manuel zu tun, pro Hardwaremodul. Aber 66 
mal, ist mir zu viel. Kann ich irgendwie über #defines iterieren?

Klar kann ich die Adressen in ein zweidimensionales Array reinpacken, 
und über Indexe einfach durchlaufen, ist aber laut richtlinien 
unerwünscht :(

Habt ihr Vorschläge?
Wenn es Systematiken gibt, sind auch die Präprozessor Möglichkeiten 
'stringize' bzw. 'tokenize' oft hilfreich.

In aller Kürze.
Anstatt 66 mal die komplette Struktur per Hand runterzucode, den 
Präprozessor benutzen, so dass er aus einem #define zb die 11 
Definitionen für ein Hardwaremodul erzeugt.

Wenn du mal ein paar Beispiele zeigen würdest, könnte man dir zeigen wie 
das gehen könnte.

Wichtig: Du brauchst ein Benamungsschema, so dass sich diese Namen
SCI_SCI0BDL_ADR_UI16
nach einem Schema ergeben. Genauso die Pointernamen.

(Aber ich hab beim Lesen deiner Frage keine wirkliche Vorstellung davon 
bekommen, wie dein Aufbau ist)
Gast
Lösung gefunden. Ich "klebe" meine defines zusammen mithilfe von einem 
makro. Funktioniert super.
So mach ich das:

...
#define GLUE(begin,id,end)\
begin##id##end

...
a =  GLUE(SCI_SCI,0,BDL_ADR_UI16);
b =  GLUE(SCI_SCI,1,BDL_ADR_UI16);


und über "id" iteriere ich in eine schleife. So :)
Danke an alle

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.