Ich schreibe gerade ein Programm, das mir einige LEDs mit verschiedenen Mustern blinken lässt. Der Übersicht wegen wird jeder dieser Effekte in eine eigene Datei ausgelagert, wobei jede von diesen Labels der Art Effect_NAME_init, Effect_NAME_step, Effect_NAME_ADC_complete usw. hat. Im Hauptprogramm habe ich dann Zeilen wie .equ EFFECTS = 3 #define EFFECT_1 alles_an ; alle LEDs leuchten #define EFFECT_2 lauflicht_punkt ; Punktlauflicht #define EFFECT_3 lauflicht_balken ; Balkenlauflicht und an den entsprechenden Stellen im Programm Makroaufrufe wie EFFECT_SWITCH mode,1,EFFECT_1,init,init_done EFFECT_SWITCH mode,2,EFFECT_2,init,init_done EFFECT_SWITCH mode,3,EFFECT_3,init,init_done wobei das Macro nicht viel macht: .macro EFFECT_SWITCH cpi @0, @1 brne next rcall Effect_@2_@3 rjmp @4 next: .endmacro "mode" (@0) ist der Name des Registers in dem die Nummer des aktuell ausgewählten Effekts steht. Wenn @1 damit übereinstimmt wird Effect_@2_@3 aufgerufen (also z.B. "Effect_lauflicht_punkt_init" falls mode=0x02). Schließlich wird nach einem Aufruf zum Label @4 (hier "init_done") gesprungen, das nach dem ganzen Block der Makro-Aufrufe ist. So, das war die Einleitung. Jetzt meine Fragen: 1.) Mir gefällt z. B. gar nicht, dass ich sowohl den Vergleichswert (@1) als auch den Namen (@2) angeben muss. Die Verwendung von "EFFECT_@1" anstatt "@2 "innerhalb des Makros führt nicht zu dem was es soll (was ich auch erwartet habe). Gibt es trotzdem eine Möglichkeit das zu optimieren? 2.) Die Makroaufrufe sind ja bis auf die laufende Ziffer identisch. Gibt es eine Möglichkeit da eine Art Schleife draus zu machen, sodass ich beim Hinzufügen/Entfernen eine Effekts einfach nur das .equ und die #define am Anfang ändern muss?
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.