www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Studio4 Assembler Macro Fragen


Autor: Chris O. (lupin_iii)
Datum:

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

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.