#define RU1 r18 poweronreset: .byte 1 .macro store p0 p1 p2 ldi /p1 , /p2 sts /p0 , /p1 .endm store poweronreset , RU1 , 13 avr.asm: Assembler messages: avr.asm:10: Error: bad expression avr.asm:10: Error: register number above 15 required avr.asm:10: Error: `,' required avr.asm:10: Error: garbage at end of line avr.asm:10: Error: bad expression avr.asm:10: Error: `,' required avr.asm:10: Error: constant value required avr.asm:10: Warning: skipping two-word instruction avr.asm:10: Error: garbage at end of line Was muss hier geändert werden, damit es läuft?
Naja. So geht's nicht, ist sehr weit weg... Ich empfehl mal ein paar AVR ASM Beispiele reinzuziehen und zu vergleichen.
voga2073 schrieb: > Backslash statt forward slash Ok, super, danke. Jetzt wird aber beim Register RU1 eine Fehlermeldung ausgeworfen. Wie werden Register korrekt definiert?
Statt #define RU1 r18 machste #define r18 RU1 dann geht das auch. Volker
Nee, warn bisschen blöd. Das sollte als RU1 = r18 gehen. Probiers mal, vllt. auch umgekehrte Reihenfolge. Volker
Funktioniet leider nicht. Als Fehlermeldung kommt immer: avr.asm:10: Error: register name or number from 0 to 31 required
... das andere habe ich gerade erst gesehen, werde es ausprobieren und dann melden.
RU1 = r18 r18 = RU1 geht beides nicht. Wieder die gleiche Fehlermeldung.
Also, jetzt mal selbst probiert. Der Code:
1 | #define RU1 r18 |
2 | poweronreset: .byte 1 |
3 | |
4 | .macro store p0 p1 p2 |
5 | ldi \p1 , \p2 |
6 | sts \p0 , \p1 |
7 | .endm |
8 | |
9 | store poweronreset , RU1 , 13 |
wird fehlerfrei übersetzt in: 8cd: 2d e0 ldi r18, 0x0D ; 13 8cf: 20 93 cc 08 sts 0x0088, r18 Volker
...hier leider nicht. Habe festgestellt, dass alles was mit # anfängt ignoriert wird, bzw. als Kommentar betrachtet wird. Auch .equ RU1 , r18 geht nicht, gleiche Fehlermeldung.
Der Macro-Syntax nach zu urteilen müsste das der gcc sein. Ended der Name der Assemblerdatei auf .S? Sonst läuft die u.U. nicht durch den Precompiler und dann werden die Defs nicht ausgewertet. Volker
Spess53 schrieb: > Um welchen AVR Assembler geht hier? Avr-as von binutils auf Linux. http://ftp.gnu.org/gnu/binutils/ (binutils-2.22.tar.bz2) http://sourceware.org/binutils/docs/as Auch ein Umbenennen mit Endung .s oder .S zeigt die gleichen Ausgaben.
Rainer S. schrieb: > Hat jemand eine Idee? Wie benutzt du denn den Assembler? Ich vermute mal, dass du ihn direkt aufrufst. Das ist keine so gute Idee. Benutze den avr-gcc als Frontend, dann klappt das auch mit dem Präprozessor.
Stefan Ernst schrieb: > Rainer S. schrieb: >> Hat jemand eine Idee? > > Wie benutzt du denn den Assembler? Ich vermute mal, dass du ihn direkt > aufrufst. Ja, richtig. avr-as [file] > Das ist keine so gute Idee. Benutze den avr-gcc als Frontend, > dann klappt das auch mit dem Präprozessor. Ich brauche aber nur den Assembler... Geht das nicht auch ohne GCC?
Rainer S. schrieb: > Ich brauche aber nur den Assembler... Offenbar ja nicht, denn du willst ja auch den Präprozessor haben. Und wenn du mit dem vom Assembler produzierten Output irgendetwas anfangen willst, dann brauchst du auch noch den Linker hinterher. Rainer S. schrieb: > Geht das nicht auch ohne GCC? Klar, dann musst du eben alles selber aufrufen (Präprozessor vorher, Linker hinterher), mit den richtigen Optionen, dazu noch ein Linker-Script selber schreiben (obwohl es im einfachsten Fall vielleicht auch ohne Linker-Script geht).
Stefan Ernst schrieb: > Rainer S. schrieb: >> Ich brauche aber nur den Assembler... > > Offenbar ja nicht, denn du willst ja auch den Präprozessor haben. Keine Ahnung was jetzt ein Präprozessor ist... Hatte gedacht, es wäre (relativ) einfach vom Atmel-Assembler auf den avr-as umzusteigen. avr-gcc ist bei den Binutils nicht dabei. Habe ich versucht aufzurufen. > Und > wenn du mit dem vom Assembler produzierten Output irgendetwas anfangen > willst, dann brauchst du auch noch den Linker hinterher. Aha. > Rainer S. schrieb: >> Geht das nicht auch ohne GCC? > > Klar, dann musst du eben alles selber aufrufen (Präprozessor vorher, > Linker hinterher), mit den richtigen Optionen, dazu noch ein > Linker-Script selber schreiben (obwohl es im einfachsten Fall vielleicht > auch ohne Linker-Script geht). Ist das denn relativ einfach möglich, oder soll ich das lieber weiter mit dem Atmel-Assembler machen. Ich würde gerne unter Linux arbeiten.
Rainer S. schrieb: > Ist das denn relativ einfach möglich, oder soll ich das lieber weiter > mit dem Atmel-Assembler machen. Ich würde gerne unter Linux arbeiten. Warum nimmst du nicht den Assembler "avra"? Er ist meistens in den Linux-Paketen enthalten. Soweit ich mich erinnere, ist avra zum Atmel-Assembler kompatibel. Er besitzt sogar ein paar nützliche Erweiterungen.
Rainer S. schrieb: > Stefan Ernst schrieb: >> Rainer S. schrieb: >>> Ich brauche aber nur den Assembler... >> >> Offenbar ja nicht, denn du willst ja auch den Präprozessor haben. > > Keine Ahnung was jetzt ein Präprozessor ist... Das ist das Ding, das #define und Konsorten auflöst. Wenn du keinen Präprozessor verwenden willst/kannst/darfst, dann beschränke dich auf .macro und .altmacro, d.h. die Makro-Syntak/-Semantik von gas anstatt der von cpp. > Hatte gedacht, es wäre (relativ) einfach vom Atmel-Assembler auf den > avr-as umzusteigen. > avr-gcc ist bei den Binutils nicht dabei. Habe ich versucht aufzurufen. Wer installiert denn avr-binutils ohne avr-gcc? > Ist das denn relativ einfach möglich, oder soll ich das lieber weiter > mit dem Atmel-Assembler machen. Ich würde gerne unter Linux arbeiten. avr-gcc/avr-as ist nicht kompliziert, aber in der Verwendung eben etwas anders als der Atmel-Assembler. Dafür ist der GNU-Assembler leistungsfähiger.
Markus W. schrieb: > Rainer S. schrieb: >> Ist das denn relativ einfach möglich, oder soll ich das lieber weiter >> mit dem Atmel-Assembler machen. Ich würde gerne unter Linux arbeiten. > > Warum nimmst du nicht den Assembler "avra"? Er ist meistens in den > Linux-Paketen enthalten. Kannte ich bis jetzt nicht. Probiere ich vielleicht mal aus. Auf der Seite steht, dass er kompatibel zum Atmel Assembler ist. Johann L. schrieb: > Wenn du keinen Präprozessor verwenden willst/kannst/darfst, dann > beschränke dich auf .macro und .altmacro, d.h. die > Makro-Syntak/-Semantik von gas anstatt der von cpp. Das hört sich kompliziert an... >> Hatte gedacht, es wäre (relativ) einfach vom Atmel-Assembler auf den >> avr-as umzusteigen. >> avr-gcc ist bei den Binutils nicht dabei. Habe ich versucht aufzurufen. > > Wer installiert denn avr-binutils ohne avr-gcc? In dem binutils Download ist auch arm-as und arm-ld drin, den ich für einen Freepascal Crosscompiler benötige. Da habe ich dann eben auch avr-as probiert. >> Ist das denn relativ einfach möglich, oder soll ich das lieber weiter >> mit dem Atmel-Assembler machen. Ich würde gerne unter Linux arbeiten. > > avr-gcc/avr-as ist nicht kompliziert, aber in der Verwendung eben etwas > anders als der Atmel-Assembler. Dafür ist der GNU-Assembler > leistungsfähiger. Warum ist der denn leistungsfähiger?
Versuch's mal in der Richtung:
1 | #include "avr/io.h" |
2 | #include "GLCD_ISR_defs.h" |
3 | |
4 | .extern scr_ln_nr ; unsigned char, number 0..19 of screen line |
5 | .extern text ; unsigned char [20][40], holds screen text |
6 | .extern p_text ; pointer to actual text position |
7 | .extern schrift ; const unsigned char schrift[12][256] PROGMEM, font |
8 | .global TIMER0_OVF_vect |
9 | .equ set_cp, 16 ; register for CP set constant |
10 | .equ ch_ln_ctr, 17 ; char scan line ctr |
11 | .equ scr_ln_ctr, 18 ; screen line ctr in |
12 | .equ clr_cp, 19 ; register for CP clear constant |
13 | .equ schrift_lb, 22 ; backup register for address lowbyte of schrift |
14 | .equ schrift_hb, 23 ; backup register for address highbyte of schrift |
15 | .equ tmp, 24 |
16 | .equ xl, 26 |
17 | .equ xh, 27 |
18 | .equ zl, 30 |
19 | .equ zh, 31 |
Da sind auch noch Anweisungen drin um auf in C deklarierte Variablen zuzugreifen.
1 | ldi tmp, t0_preload ; load preload const as defined hy GLCD_ISR_defs.h |
2 | lds scr_ln_ctr, (scr_ln_nr) ; load actual screen line number |
3 | lds ch_ln_ctr, (ch_ln_nr) ; load line nr within char |
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.