www.mikrocontroller.net

Forum: PC-Programmierung Iteration über mehrere #defines


Autor: moOmb@ (Gast)
Datum:

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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der C-Präprozessor kennt keine Schleifen.
Man kann Quelltext aber auch mit anderen Präprozessoren generieren
(m4, Shellskripte, ...).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: moOmb@ (Gast)
Datum:

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

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.