ARM-Keil: SystemInit STM32F103C8

Gast #3339246
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
#3339314
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).
Gast #3339354
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?
#3339370
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

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.