gulliver
25.06.2007, 19:12
Irgendwie habe ich ein Verständnisproblem mit Makros.
Um das Programm etwas lesbarer zu machen, habe ich ein kleines Makro drin.
Ich habe hier mal nur die relavanten Programmteile aufgeführt, da das komplette Programm schon relativ umfangreich ist und nur verwirren würde. Außerdem ist es noch nicht fertig.
;*** Konstantendefinition ***
...
.equ rot = 0 ;Indexnummern der Farben
.equ gruen = 1
.equ blau = 2
...
.cseg
...
;-------------------------------------------------------------------------
;Macro zum Eintragen der Farbabfolge
.macro Farbfolge
ldi temp1,@0
ldi temp2,@1
ldi temp3,@2
.endmacro
;
;-------------------------------------------------------------------------
;******* Subroutinen *************
...
...
;Daten aus dem Makro werden in die Programmabfolge eingetragen
;
Prog_Daten_speichern:
st Z+,temp1 ;die Indexe der Farben in der
st Z+,temp2 ;Programmsteuerung nacheinander ablegen
st Z+,temp3
ldi temp1,255 ;zuletzt eine Endekennung
st Z+,temp1
ret
;
...
...
;-------------------------------------------------------------------------
;******* Hauptprogramm *************
...
...
;
programmdaten_eintragen:
ldi ZL,low(Tabelle) ;Zeiger auf erstes Programmmodul
ldi ZH,high(Tabelle)
Farbfolge rot,gruen,blau
rcall Prog_Daten_speichern
Farbfolge gruen,rot,blau
rcall Prog_Daten_speichern
...
;-------------------------------------------------------------------------
;******* Datenbereich **************
.dseg
;Tabelle der Adressen für die einzelen Farbmodule
;Aufruf:
;in Y ist die Adresse des Farbindexes der abgearbeitet werden soll
;in Z ist die Adresse des Programmmoduls, das abgearbeitet werden soll
;
Tabelle:
;Programmsteuerung
Prog0: ;Reihenfolge: r,g,b
.byte 4 ;255 ist Endekennung
Prog1: ;Reihenfolge: g,r,b
.byte 4
...
Nach den Instruction Set's sollte diese Konstruktion eigentlich funktionieren. Nun bin ich etwas ratlos und hoffe auf einen Hinweis. Die Fehlermeldung erzählt mir was von einem unbekanntem Makro sowohl bei 'Farbfolge' als auch bei 'rot' und mit den Kommas meckert der Assembler auch noch rum. Nun frage ich mich, wie mache ich denn das Makro bekannt? Es ist doch definiert, genau wie es im "AVR Assembler User Guide" beschrieben wird.
Das "AVR Assembler User Guide", das ja von Atmel stammt, ist für eine Anleitung auch sehr dürftig und damit keine große Hilfe für Einsteiger. Auf die Befehle geht dieses Tutor so gut wie garnicht ein.
Alles andere, was sich als Tutorial bezeichnet, plappert mehr oder weniger aus den Befehlsinstruktionen nach und geht nicht weiter auf die einzelnen Befehle ein, ist also auch nicht gerade sehr hilfreich und wenn, dann nur auf ganz einfachem Niveau.
mfg Roger
Edit:
Hat sich erledigt. Ich hatte das Makro erst nach seiner ersten Benutzung definiert. War mir garnicht aufgefallen.
Sorry für den Schnellschuß.
Um das Programm etwas lesbarer zu machen, habe ich ein kleines Makro drin.
Ich habe hier mal nur die relavanten Programmteile aufgeführt, da das komplette Programm schon relativ umfangreich ist und nur verwirren würde. Außerdem ist es noch nicht fertig.
;*** Konstantendefinition ***
...
.equ rot = 0 ;Indexnummern der Farben
.equ gruen = 1
.equ blau = 2
...
.cseg
...
;-------------------------------------------------------------------------
;Macro zum Eintragen der Farbabfolge
.macro Farbfolge
ldi temp1,@0
ldi temp2,@1
ldi temp3,@2
.endmacro
;
;-------------------------------------------------------------------------
;******* Subroutinen *************
...
...
;Daten aus dem Makro werden in die Programmabfolge eingetragen
;
Prog_Daten_speichern:
st Z+,temp1 ;die Indexe der Farben in der
st Z+,temp2 ;Programmsteuerung nacheinander ablegen
st Z+,temp3
ldi temp1,255 ;zuletzt eine Endekennung
st Z+,temp1
ret
;
...
...
;-------------------------------------------------------------------------
;******* Hauptprogramm *************
...
...
;
programmdaten_eintragen:
ldi ZL,low(Tabelle) ;Zeiger auf erstes Programmmodul
ldi ZH,high(Tabelle)
Farbfolge rot,gruen,blau
rcall Prog_Daten_speichern
Farbfolge gruen,rot,blau
rcall Prog_Daten_speichern
...
;-------------------------------------------------------------------------
;******* Datenbereich **************
.dseg
;Tabelle der Adressen für die einzelen Farbmodule
;Aufruf:
;in Y ist die Adresse des Farbindexes der abgearbeitet werden soll
;in Z ist die Adresse des Programmmoduls, das abgearbeitet werden soll
;
Tabelle:
;Programmsteuerung
Prog0: ;Reihenfolge: r,g,b
.byte 4 ;255 ist Endekennung
Prog1: ;Reihenfolge: g,r,b
.byte 4
...
Nach den Instruction Set's sollte diese Konstruktion eigentlich funktionieren. Nun bin ich etwas ratlos und hoffe auf einen Hinweis. Die Fehlermeldung erzählt mir was von einem unbekanntem Makro sowohl bei 'Farbfolge' als auch bei 'rot' und mit den Kommas meckert der Assembler auch noch rum. Nun frage ich mich, wie mache ich denn das Makro bekannt? Es ist doch definiert, genau wie es im "AVR Assembler User Guide" beschrieben wird.
Das "AVR Assembler User Guide", das ja von Atmel stammt, ist für eine Anleitung auch sehr dürftig und damit keine große Hilfe für Einsteiger. Auf die Befehle geht dieses Tutor so gut wie garnicht ein.
Alles andere, was sich als Tutorial bezeichnet, plappert mehr oder weniger aus den Befehlsinstruktionen nach und geht nicht weiter auf die einzelnen Befehle ein, ist also auch nicht gerade sehr hilfreich und wenn, dann nur auf ganz einfachem Niveau.
mfg Roger
Edit:
Hat sich erledigt. Ich hatte das Makro erst nach seiner ersten Benutzung definiert. War mir garnicht aufgefallen.
Sorry für den Schnellschuß.