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?
Der C-Präprozessor kennt keine Schleifen. Man kann Quelltext aber auch mit anderen Präprozessoren generieren (m4, Shellskripte, ...).
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.