Hallo, leider kenne ich die "Welt" der GCC- Tools (noch) wenig, ich möchte eventuell eine früher entwickelte (8080)-Macrosprache für meine Atmel Versuche umsetzen, falls dies möglich ist. Als Einstieg suche ich einen Hinweis bzw. den Manual-Einstieg wo die Preprozessor-Fähigkeiten stehen. Ich bin für jeden Hinweis dankbar. So möchte ich zum Beispiel: ASSIGN <channel>,<identifier>,<adress>,<mask> ASSIGN (INPUT,POS,0x32,0x38) PseudoCODE...umsetzen nach: ?? ... #if channel EQ INPUT #define xadr_POS 0x32 #define xmask_POS 0x38 #EXIT MACRO ??? #ENDIF .... Kann mir jemand sagen wie man da die Dummy Paramete verknüpft zb: xadr$identifier wird zu xadr_POS... etc. Ein Zeige auf da Manual wo ich diese Thematik finde würde mir schon reichen. Oder geht sowas nicht? Das Ganze wurde füher mit nem Macro_Assembler realisiert. Vielen Dank Achim
Hallo, diese Art von Makros beim 8080 kenne ich auch. Wie Du das jetzt im Detail beim gcc umsetzen musst, kann ich Dir nicht sagen. Ein Macro beginnt mit .macro Bei Dir wäre das .macro ASSIGN channel,identifier,adress,mask ..... ; weiterer Code .endm Die nachfolgenden Anweisungen lauten entsprechend #if ==> .if #endif ==> .endif #EXIT MACRO ==> .exitm Angesprochen werden die Parameter dann mit einem Backslash davor: .if \address - \mask Aufgerufen wird das Makro dann: ASSIGN INPUT,POS,0x32,0x38 Weiteres findest Du in der Assembler-Doku. Ich habe die nur ausgedruckt und weiss nicht mehr wo ich die zugehörige Datei auf meinem Rechner habe. Ich kann auch nicht mehr sagen wo ich die runtergeladen habe. Versuch einfach mal bei google nach "gnu-assembler" zu suchen. Bei mir ist es die Version 2.11 und nennt sich "Using as" Grüße Andreas
Hallo AndreasH geht sowas auch in C mit #define xxx oder ist das überzogen? Ich meine also nicht im Assembler. Leider find ich (noch) keine Manuals über das Thema MfG Achim
Jein, genau das gleiche wirst du in C vermutlich nicht erreichen können. Du musst bedenken, dass der Präprozessor von C recht "dumm" ist und selten mehr als einen sture Textersetzung vornimmt. Es gibt zwar sowas wie #ifdef, aber damit kannst du nur auf Präprozessorsymbole testen, nicht auf Parameter. Du brauchst als if-Anweisung also IMHO das tatsächliche if() von C. Für xadr_POS musst du eine globale Variable definieren. Immerhin kannst du zwei Token mit dem Präprozessor aneinanderkleben: #define some_macro(identifier) xadr_##identifier some_macro(POS) liefert nun den dynamisch erstellten Bezeichner xadr_POS. Ein C-Buch deiner Wahl sollte IMHO die meisten deiner Fragen klären können.
p.s.: Hm, kann sein, dass ich mich gerade gewaltig getäuscht habe. Evtl. geht sowas (zu faul zum Testen): #define POS = 1 #if (POS == 1) #define POS_IST_EINS #endif Innerhalb von Makros kannst du aber AFAIK keine weiteren Präprozessorbefehle absetzen, weil sie nicht am Anfang der Zeile stehen würden.
Da der 8080 in Assembler programmiert wird und mir kein C-Compiler bekannt ist, hatte ich angenommen Du willst das ganze auch in Assembler umsetzen. Ansonsten gilt. Probier es einfach an einem kleinen Makro aus. Ich meine mich daran zu erinnern, dass ich in den letzten Monaten mal folgendes ausprobiert habe: #define POS = 5 #if (POS == 5) #elif (POS == 1) Das ging dann nicht. Ich kann dir auch nicht mehr genau sagen welcher Compiler das war. Da ich in den letzten Wochen nur mit dem avr-gcc gespielt habe, ist die Wahrscheinlichkeit gross dass es mit dem war. Könnte allerdings auch in ähnlicher Form in Delphi gewesen sein. Wie gesagt, kann mich nicht mehr genau daran erinnern. Daher: Probieren geht über studieren. Grüße Andreas
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.