Kompilierung keil 4,70 Assembler Arm cortex m3

Pascal, Basic und andere nicht aufgelistete
Antworten
hardcoding
Beiträge: 91
Registriert: Do Okt 04, 2012 9:24 pm

Kompilierung keil 4,70 Assembler Arm cortex m3

Beitrag von hardcoding » Mo Mai 05, 2014 7:44 pm

Hallo allerseits

Ich will unter keil uvision 4,70 folgenden Code kompilieren:

Code: Alles auswählen

 AREA MyData, DATA, align = 2
  GLOBAL MeinNumFeld  

  
MeinNumFeld    DCD       0x22,  2_00111110,  -52,  78,  0x60000000,  0x50000000

MeinWordFeld  DCW       0x1234, 0x5678, 0x9abc, 0xdef0

                
MeinTextFeld  DCB      "ABab0123"

                
MeinByteFeld  DCB       0xef, 0xdc, 0xba, 0x98

MeinBlock       SPACE     0x20

;********************************************
; Code section, aligned on 8-byte boundery
;********************************************

  AREA MyCode, CODE, readonly, align = 2

;--------------------------------------------
; main subroutine
;--------------------------------------------
  GLOBAL main
  
  
main  PROC
  
  
; ----------------------------------------------------------------------------------------
; Laden von Konstanten in Register
; ----------------------------------------------------------------------------------------
  mov    R0, #0x12    ;Anw-01 : Konstanten 0...255 (*4, *16, *64, ....)

  mov    R1, #-2      ;Anw-02 : negative Konstanten 0...255 (*4, *16, *64, ....)

  ldr    R2,=0xfe543210  ;Anw-03: beliebige 32-bit-Konstanten (Pseudobefehl !!!)
  

; -----------------------------------------------------------------------------------------
; Zugriff auf Variablen
; -----------------------------------------------------------------------------------------

    ; --- Byte-, Halbword- und Wortzugriffe ---
    ldr     r0, =MeinByteFeld    ; Anw-04: Lade die Startadresse des Bytefeldes
    ldrb    r1, [r0]             ; Anw-05: Achtung: auch bei Byte- und Halbwort-Zugriffen
    ldrh    r2, [r0]             ; Anw-06           wird immer das ganze Register verändert !!!!!
    ldr     r3, [r0]             ; Anw-07

    ; --- einfache Feldzugriffe ---
    ldr     r4, =MeinWordFeld    ; Anw-08: Lade die Adresse des Wortfeldes "MeinWortFeld"
    ldr     r5, [r4]             ; Anw-09
    ldr     r6, [r4, #4]         ; Anw-10: konstanter Offset

    ; --- Variablen (Worte) speichern ---
    ldr     r0, =0x123456ab      ; Anw-11: Lade die Konstante (>255)
    ldr     r1, =MeinBlock       ; Anw-12: Lade die Anfangsadresse von "MeinBlock"
    str     r0, [r1]             ; Anw-13 (word-Befehl) Speicheradresse muss aligned sein !
    str     r0, [r1, #4]         ; Anw-14 (word-Befehl) Speicheradresse muss aligned sein !
    
    ; --- Variablen (Byte) speichern ---    
    mov     r2, #0x1a            ; Anw-15
    strb    r2, [r1, #9]         ; Anw-16 (byte-Befehl) 
    strb    r2, [r1, #10]        ; Anw-17 (byte-Befehl)

; -------------------------------------------------------------------------------------------
; Ganzzahl-Addition und Flags
; -------------------------------------------------------------------------------------------

    ldr     r0,=MeinNumFeld      ; Anw-18
    ldr     r1, [r0]             ; Anw-19
    ldr     r2, [r0, #4]         ; Anw-20
    
    adds    r3, r1, r2           ; Anw-21
    
    ; ---------------------------------------------
    ldr     r0,=MeinNumFeld+8    ; Anw-22
    ldr     r1, [r0]             ; Anw-23
    ldr     r2, [r0, #4]         ; Anw-24
    
    adds    r3, r1, r2           ; Anw-25
    
    ; ---------------------------------------------    
    ldr     r0,=MeinNumFeld+16   ; Anw-26
    ldr     r1, [r0]             ; Anw-27
    ldr     r2, [r0, #4]         ; Anw-28
    
    adds    r3, r1, r2           ; Anw-29            
                        
              
; ------------------------------------------------------------------------------------------
; Indirekte Adressierungsarten mit update
; ------------------------------------------------------------------------------------------

    ldr     r0,=MeinTextFeld     ; Anw-30
    ldrb    r1, [r0, #1]!        ; Anw-31
    ldrb    r1, [r0, #1]!        ; Anw-32

    ldr     r0,=MeinWordFeld     ; Anw-33
    ldr     r2, [r0], #4         ; Anw-34
    ldr     r2, [r0], #4         ; Anw-35



    

    
forever  b    forever      ; nowhere to retun if main ends    
  ENDP
  
  ALIGN 4
  END
    

Der spuckt aber folgende Fehler:

Code: Alles auswählen

erstes projekt.axf: Warning: L6665W: Neither Lib$$Request$$armlib Lib$$Request$$cpplib defined, not searching ARM libraries.

erstes projekt.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

Antworten