ATtiny10: Assembler unter Linux inkorrekte Jumps

Gast #3515105
Lesenswert?
• ▲
▼
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
Gast #3515132
Lesenswert?
• ▲
▼
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
#3515140
Lesenswert?
• ▲
▼
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.