Error: bad instruction `lsl r3,r0,#2' GCC/ Assembler

Gast #4100218
Lesenswert?
• ▲
▼
Guten Tag,

ich habe ein Problem, und zwar habe ich unter ubuntu Eclipse mit openocd 
und arm-elf-gcc (GCC) 4.1.0 am laufen. Jetzt habe ich ein Prgramm 
geschrieben, welches ein einfaches Display ansteuern sollte, und die 
Display.c einbinden sollte. Das hat auch alles gut geklappt, bis dann 
beim Compilieren der folgende Fehler auftrat:


Compiling C: display.c
arm-elf-gcc -c  -mcpu=arm7tdmi  -I. -gdwarf-2 -DROM_RUN -D__WinARM__ 
-O0 -Wall -Wcast-align -Wimplicit  -Wpointer-arith -Wswitch 
-Wredundant-decls -Wreturn-type -Wshadow -Wunused 
-Wa,-adhlns=display.lst  -Iinclude/ -MD -MP -MF .dep/display.o.d 
-Wnested-externs  -std=gnu99 display.c -o display.o
/tmp/ccngc6wm.s: Assembler messages:
/tmp/ccngc6wm.s:22: Error: bad instruction `lsl r3,r0,#2'
make: *** [display.o] Fehler 1


In der Display.c Datei ist das diese Stelle:


//**************************************************************
// delay1us(uiK) verzögert um uiK * 1us bei MCK=24Hz
// uiK <= 1.073.741.823 us = 17,8957 sec
//**************************************************************
_attribute_ ((naked)) void delay1us(unsigned int uiK){

  asm("      lsl  r3, r0, #2  \n\t" // Multi *4
    "Label:    cmp  r3, #0    \n\t"    //1
    "    beq  Ende          \n\t"    //2
    "    sub  r3, r3, #1      \n\t"    //1
    "    b  Label          \n\t"    //2
    "Ende:    mov  pc, lr    \n\t");
}


Nun weiß ich nicht genau woran es liegt. Bitte um Hilfe. Danke
Angehängte Dateien:
#4100236
Lesenswert?
• ▲
▼
Versuch vielleicht mal MOV, statt LSL.
Es gibt auf ARM keine native LSL instruction da jede ALU operation ein 
LSL auf einem Operanden machen kann. Kann hoechstens sein dass manche 
Assembler es als Alias zulaesst. Vgl. ADR.

ZigZeg

Edit: Seh gerade, im Thumb mode gibt es LSL. Vielleicht wird das nicht 
als Thumb assembliert ?
#4100249
Lesenswert?
• ▲
▼
Kai S. schrieb:
> Es gibt auf ARM keine native LSL instruction da jede ALU operation ein
> LSL auf einem Operanden machen kann. Kann hoechstens sein dass manche
> Assembler es als Alias zulaesst. Vgl. ADR.

Als ARM den Thumb(-2?) Befehssatz rausbrachte haben sie auch eine 
Assembler-Notation definiert, die gemeinsame Befehle in der gleichen 
Weise schreibt. In dieser "Unified Assembly Language" Variante existiert 
auch die LSL Schreibweise.

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.