Hallo zusammen, ich versuche gerade unter Ubuntu ein kurzes Assembly-Listing für den ATtiny10 zu übersetzen. Hierbei stoße ich nun auf ein Problem, welches ich selbst nicht mehr lösen kann. Folgende Datei (main.S): .equ DDRB, 0x01 .equ PORTB, 0x02 .org 0x0000 rjmp main main: ldi r16, 0xFF out DDRB, r16 loop: sbi PORTB, 2 nop cbi PORTB, 2 nop rjmp loop Übersetzen mit: avr-as -mmcu=avrtiny10 main.S Dump zeigen: avr-objdump -d a.out Ergebnis: 00000000 <main-0x2>: 0: 00 c0 rjmp .+0 ; 0x2 <main> 00000002 <main>: 2: 0f ef ldi r16, 0xFF ; 255 4: 01 b9 out 0x01, r16 ; 1 00000006 <loop>: 6: 12 9a sbi 0x02, 2 ; 2 8: 00 00 nop a: 12 98 cbi 0x02, 2 ; 2 c: 00 00 nop e: 00 c0 rjmp .+0 ; 0x10 <loop+0xa> Warum ist hier das "rjmp" am Ende der Loop inkorrekt? Dort sollte doch ein relativer Jump zurück stehen. Habe ich evtl. noch einen Schritt vergessen wie Linken o.ä.? Über den "avr-gcc" kann ich nicht gehen, da dieser den ATtiny10 nicht unterstützt: -mmcu=avrtiny10 sowie -mmcu=attiny10 kann ich nicht angeben bzw. wird mit Fehler abgebrochen. Gibt es andere Alternativen für Linux? Das AVR-Studio will ich ungern einsetzen. Die verwendeten Versionen: gcc version 4.7.2 (GCC) GNU assembler version 2.20.1 (avr) using BFD version (GNU Binutils) 2.20.1.20100303 Gruß Sven
Vor dem linken sind alle jmps 0. Erst nach dem linken stimmen die dann. Also: Assemblieren Linken (da mit -m avrtiny10) Dumpen
Das mit dem Linken habe ich bereits versucht, jedoch erhalte ich hier einen merkwürdigen Fehler. Ausführung: avr-ld -m avrtiny10 a.out Ausgabe: a.out: file not recognized: File truncated Was muss ich denn noch angeben? Ich habe ja keine Bibliothek verwendet gegen die ich linken muss. Ich bin mir sicher dass etwas fehlt in der Befehlszeile. Der Linker hat einfach viel zu viele Optionen. Gruß Sven
1 | avr-as -mmcu=attiny10 -o main.o main.S |
2 | avr-ld -m avrtiny10 -o main.elf main.o |
3 | avr-objcopy --output-target=ihex main.elf main.hex |
4 | avrdude -p t10 -c avrisp2 -P usb -U flash:w:main.hex:i |
Hier ein Beispiel um unter Linux ein File main.S in ein fertiges .hex file umzuwandeln und zu flashen
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.