Forum: Mikrocontroller und Digitale Elektronik ARM-Keil: SystemInit STM32F103C8


von Locke (Gast)


Lesenswert?

Bis jetzt habe ich mit einer älteren Demoversion von ARM-Keil 
"gespielt". Nachdem Problemen mit meinem ST-Link bin ich auf die 
aktuelle Demo umgestiegen.

Das Projektfile habe ich neu aufgesetzt und es wird eine neue 
Startupdatei hinzugefägt.

Beim compilieren erhalte diese Fehlermeldung:

Error: L6218E: Undefined symbol SystemInit (referred from 
startup_stm32f10x_md.o).

Wenn ich die Zeilen, die sich auf SystemInit beziehen, in der 
Startupdatei auskommentiere, dann wird ohne Fehlermeldung compiliert. 
Das erzeugte Programm funktioniert ebenfalls. Zumindest ist mir nichts 
aufgefallen.

Was hat es mit SystemInit auf sich? Muss ich eine Funktion mit diesem 
Namen schreiben?

1
Reset_Handler    PROC
2
                 EXPORT  Reset_Handler             [WEAK]
3
     IMPORT  __main
4
;     IMPORT  SystemInit
5
;                 LDR     R0, =SystemInit
6
;                 BLX     R0
7
                 LDR     R0, =__main
8
                 BX      R0
9
                 ENDP

von Detlef K. (adenin)


Lesenswert?

Unter \Keil\ARM\Startup\ST\ sind die Files system_stm32f10x.c bzw. 
system_stm32f10x_cl.c (für Connectivity line devices) enthalten.
Da ist diese Funktion implementiert.
Wenn Du dort nachschaust, wird Du sehen, das da RCC und der restliche 
Kram initalisiert werden kann (aber nicht muss, wenn Du es wo anders 
selbst erledigst).

: Bearbeitet durch User
von Locke (Gast)


Lesenswert?

Danke für deine Antwort.

Wenn ich die Datei system_stm32f10x.c in das Projekt aufnehme erhalte 
ich diese Fehlermeldung:

C:\Keil4\ARM\Inc\ST\STM32F10x\stm32f10x.h(96): error:  #35: #error 
directive: "Please select first the target STM32F10x device used in your 
application (in stm32f10x.h file)"

Den Controller habe ich im Targetdialog angegeben, sowie es in 
stm32f10x.h vorgeschlagen wird:


Tip: To avoid modifying this file each time you need to switch between 
these
devices, you can define the device in your toolchain compiler 
preprocessor.


Da mache ich doch etwas gewaltig falsch. Nur was?

von Detlef K. (adenin)


Lesenswert?

Im "Options for Target"-Dialog unter "C/C++" im Feld "Preprozessor 
Symbols" "STM32F10X_MD" eintragen (ohne die Anführungszeichen).
Wenn mehere Symbole dort eingetragen werden sollen, dann einfach mit 
Komma trennen.

So ein Eintrag hat die gleiche Bedeutung wie
1
#define STM32F10X_MD
Das könntest Du alternativ auch irgendwo so in deine Source aufnehmen.

Oder so, um Fehlermeldungen zu vermeiden, dass das Symbol schon 
definiert sein.
1
#ifndef STM32F10X_MD
2
#define STM32F10X_MD
3
#endif

: Bearbeitet durch User
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.