Forum: Mikrocontroller und Digitale Elektronik Kompilierung in Keil 4,70


von James F. (hardcoding)


Lesenswert?

Hallo allerseits

Ich will unter keil uvision 4,70 folgenden Code kompilieren:
1
  AREA MyData, DATA, align = 2
2
  GLOBAL MeinNumFeld  
3
4
  
5
MeinNumFeld    DCD       0x22,  2_00111110,  -52,  78,  0x60000000,  0x50000000
6
7
MeinWordFeld  DCW       0x1234, 0x5678, 0x9abc, 0xdef0
8
9
                
10
MeinTextFeld  DCB      "ABab0123"
11
12
                
13
MeinByteFeld  DCB       0xef, 0xdc, 0xba, 0x98
14
15
MeinBlock       SPACE     0x20
16
17
;********************************************
18
; Code section, aligned on 8-byte boundery
19
;********************************************
20
21
  AREA MyCode, CODE, readonly, align = 2
22
23
;--------------------------------------------
24
; main subroutine
25
;--------------------------------------------
26
  GLOBAL main
27
  
28
  
29
main  PROC
30
  
31
  
32
; ----------------------------------------------------------------------------------------
33
; Laden von Konstanten in Register
34
; ----------------------------------------------------------------------------------------
35
  mov    R0, #0x12    ;Anw-01 : Konstanten 0...255 (*4, *16, *64, ....)
36
37
  mov    R1, #-2      ;Anw-02 : negative Konstanten 0...255 (*4, *16, *64, ....)
38
39
  ldr    R2,=0xfe543210  ;Anw-03: beliebige 32-bit-Konstanten (Pseudobefehl !!!)
40
  
41
42
; -----------------------------------------------------------------------------------------
43
; Zugriff auf Variablen
44
; -----------------------------------------------------------------------------------------
45
46
    ; --- Byte-, Halbword- und Wortzugriffe ---
47
    ldr     r0, =MeinByteFeld    ; Anw-04: Lade die Startadresse des Bytefeldes
48
    ldrb    r1, [r0]             ; Anw-05: Achtung: auch bei Byte- und Halbwort-Zugriffen
49
    ldrh    r2, [r0]             ; Anw-06           wird immer das ganze Register verändert !!!!!
50
    ldr     r3, [r0]             ; Anw-07
51
52
    ; --- einfache Feldzugriffe ---
53
    ldr     r4, =MeinWordFeld    ; Anw-08: Lade die Adresse des Wortfeldes "MeinWortFeld"
54
    ldr     r5, [r4]             ; Anw-09
55
    ldr     r6, [r4, #4]         ; Anw-10: konstanter Offset
56
57
    ; --- Variablen (Worte) speichern ---
58
    ldr     r0, =0x123456ab      ; Anw-11: Lade die Konstante (>255)
59
    ldr     r1, =MeinBlock       ; Anw-12: Lade die Anfangsadresse von "MeinBlock"
60
    str     r0, [r1]             ; Anw-13 (word-Befehl) Speicheradresse muss aligned sein !
61
    str     r0, [r1, #4]         ; Anw-14 (word-Befehl) Speicheradresse muss aligned sein !
62
    
63
    ; --- Variablen (Byte) speichern ---    
64
    mov     r2, #0x1a            ; Anw-15
65
    strb    r2, [r1, #9]         ; Anw-16 (byte-Befehl) 
66
    strb    r2, [r1, #10]        ; Anw-17 (byte-Befehl)
67
68
; -------------------------------------------------------------------------------------------
69
; Ganzzahl-Addition und Flags
70
; -------------------------------------------------------------------------------------------
71
72
    ldr     r0,=MeinNumFeld      ; Anw-18
73
    ldr     r1, [r0]             ; Anw-19
74
    ldr     r2, [r0, #4]         ; Anw-20
75
    
76
    adds    r3, r1, r2           ; Anw-21
77
    
78
    ; ---------------------------------------------
79
    ldr     r0,=MeinNumFeld+8    ; Anw-22
80
    ldr     r1, [r0]             ; Anw-23
81
    ldr     r2, [r0, #4]         ; Anw-24
82
    
83
    adds    r3, r1, r2           ; Anw-25
84
    
85
    ; ---------------------------------------------    
86
    ldr     r0,=MeinNumFeld+16   ; Anw-26
87
    ldr     r1, [r0]             ; Anw-27
88
    ldr     r2, [r0, #4]         ; Anw-28
89
    
90
    adds    r3, r1, r2           ; Anw-29            
91
                        
92
              
93
; ------------------------------------------------------------------------------------------
94
; Indirekte Adressierungsarten mit update
95
; ------------------------------------------------------------------------------------------
96
97
    ldr     r0,=MeinTextFeld     ; Anw-30
98
    ldrb    r1, [r0, #1]!        ; Anw-31
99
    ldrb    r1, [r0, #1]!        ; Anw-32
100
101
    ldr     r0,=MeinWordFeld     ; Anw-33
102
    ldr     r2, [r0], #4         ; Anw-34
103
    ldr     r2, [r0], #4         ; Anw-35
104
105
106
107
    
108
109
    
110
forever  b    forever      ; nowhere to retun if main ends    
111
  ENDP
112
  
113
  ALIGN 4
114
  END

Der spuckt aber folgende Fehler:
1
erstes projekt.axf: Warning: L6665W: Neither Lib$$Request$$armlib Lib$$Request$$cpplib defined, not searching ARM libraries.
2
3
erstes projekt.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.

Könnt ihr mir vielleicht weiterhelfen ?

von Detlef K. (adenin)


Lesenswert?

Der Compiler erwartet ein Label __main, das gehört zu Code, den der 
Compiler nomalerweise automatisch dem Programm hinzufügt, um zB. 
Variablen zu initialisieren.

Benenne main in __main um, dann ist dieser Teil der Probleme vorerst 
gelöst.

von Detlef K. (adenin)


Angehängte Dateien:

Lesenswert?

Die Warnung
Warning: L6665W: Neither Lib$$Request$$armlib Lib$$Request$$cpplib 
defined, not searching ARM libraries.
wird ausgegeben, weil der Compiler annimmt ein normales C-Projekt zu 
bearbeiten.

Diese Warnung kannst Du unterdrücken, wenn Du in Target->Linker-> Misc 
controls:
--diag_suppress=6665
einfügst

: Bearbeitet durch User
von James F. (hardcoding)


Lesenswert?

erstmal danke für deine Hilfe. Ich habe beide main geändert und die 
Linker einstellung auch.

Aber jetzt kommt der Fehler
1
erstes projekt.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
2
erstes projekt.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.

: Bearbeitet durch User
von Detlef K. (adenin)


Lesenswert?

Was für eine CPU ist es den?
Da fehlt die passende Startup.s

von James F. (hardcoding)


Lesenswert?

Ich will es nur auf keil Simulieren. Wir arbeiten normalerweise mit 
cortex-m3 den habe ich aber zuhause nicht.

: Bearbeitet durch User
von James F. (hardcoding)


Lesenswert?

Hat sich erledigt habe es hinbekommen.

von Detlef K. (adenin)


Angehängte Dateien:

Lesenswert?

Ich hab speziell für deine Bedürfnisse eine Startupdatei modifiziert.
Auspacken, in dein Projektverzeichnis kopieren und ins Projekt 
einbinden.

ups, zu spät.

: Bearbeitet durch User
von Ich (Gast)


Lesenswert?

Es wäre schön, wenn Du Deine Lösung uns noch mitteilst. Für den Fall, 
dass jemand ein ähnliches Problem hat.

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
Noch kein Account? Hier anmelden.