Forum: Mikrocontroller und Digitale Elektronik Keil uVision Linker Error L6218E


von DerM (Gast)


Lesenswert?

Hallo zusammen,
ich baue gerade meinen ersten C Code für ein STM32F0Discovery zusammen 
und versuche eine LED zum leuchten zu bringen.
Als Software verwende ich Keil uVision V5.12
Beim Compilieren kommt folgende Fehlermeldung:

Rebuild target 'Target 1'
compiling main.c...
compiling Buttons_STM32F0-Discovery.c...
compiling LED_STM32F0-Discovery.c...
compiling RTX_Conf_CM.c...
assembling startup_stm32f051.s...
compiling system_stm32f0xx.c...
linking...
.\Objects\gpiotest.axf: Error: L6218E: Undefined symbol GPIO_Init 
(referred from main.o).
.\Objects\gpiotest.axf: Error: L6218E: Undefined symbol GPIO_WriteBit 
(referred from main.o).
.\Objects\gpiotest.axf: Error: L6218E: Undefined symbol 
RCC_AHBPeriphClockCmd (referred from main.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 3 error messages.
".\Objects\gpiotest.axf" - 3 Error(s), 0 Warning(s).
Target not created.

Kann mir jemand auf die Sprünge helfen wo das herkommen könnte?
Anbei noch mein Code:

#include "stm32f0xx_gpio.h"
#include "stm32f0xx_rcc.h"


int main(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  SystemInit();

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_SET);

  while(1) {
  }}

von Oliver (Gast)


Lesenswert?

Muss da evtl. noch die Library in das Projekt mit eingebunden werden?

von DerM (Gast)


Lesenswert?

Die jeweiligen ".h"-Dateien liegen bereits im selben Ordner in dem das 
Projekt hinterlegt ist.

von Oliver (Gast)


Lesenswert?

Die .h Datei ist ja nur der Header für die Lib damit der Compiler wieß 
welche Funktionen usw. in der Lib vorhanden sind. Der Linker, welcher ja 
die Fehler auswirft, brauch dann aber die eigentliche Lib um sie mit in 
den Maschinencode zu linken. Die scheint er nicht zu finden.

von DerM (Gast)


Lesenswert?

Also die jeweils zugehörigen ".c"-Dateien? Die liegen auch im selben 
Verzeichnis wie die ".h"-Dateien und das Projekt selbst.

von DerM (Gast)


Lesenswert?

Mittlerweile bekomm ich folgenden Fehler:

Rebuild target 'Target 1'
compiling main.c...
linking...
.\Objects\gpiotest.sct(7): error: L6236E: No section matches selector - 
no section to be FIRST/LAST.
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 1 error messages.
".\Objects\gpiotest.axf" - 1 Error(s), 0 Warning(s).
Target not created.

Nach dem Doppelklick auf

.\Objects\gpiotest.sct(7): error: L6236E: No section matches selector - 
no section to be FIRST/LAST.

Erscheint folgendes Fenster mit diesem Inhalt:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00002000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

Mittlerweile bin ich ratlos.
Ich glaube Mikrocontroller sind nichts für mich.
Dass das überhaupt jemand macht bei dem komplizierten **** :/

von Oliver (Gast)


Lesenswert?

Wenn's .c Datein sind, dann ja.
Nur dadurch dass sie im selben Ordner liegen werden sie noch lange nicht 
in das Projekt eingebunden. Die musst du sicher noch manuell zum 
Projektbaum hinzufügen.
Kenn mich war mit Keil nicht aus, denke aber dass es hier genau so ist 
wie bei anderen Toolchains.

von DerM (Gast)


Lesenswert?

Habe sie manuell hinzugefügt jetzt sind es anstatt 1 Error plötzlich 1 
Error und 48 Warnings -.-

stm32f0xx_rcc.c(1726): warning:  #223-D: function "assert_param" 
declared implicitly
    assert_param(IS_RCC_GET_IT(RCC_IT));

von Hanz mit z (Gast)


Lesenswert?

Die Pfade zu den Headern müssen dem Projekt bekannt gemacht werden:

Rechter Mausklick auf Projekt -> Options for Target -> C/C++ -> Include 
Paths

von Hanz mit z (Gast)


Lesenswert?

Nachtrag: Zum Benutzen von Assert muss ein define USE_FULL_ASSERT 
vorhanden sein.

von DerM (Gast)


Lesenswert?

Bringt leider auch keine Besserung, ein Error jagt den nächsten:

Rebuild target 'Target 1'
compiling main.c...
..\gpiotest\core_cm0.h(127): error:  #5: cannot open source input file 
"core_cmInstr.h": No such file or directory
  #include <core_cmInstr.h>                /* Core Instruction Access 
*/
main.c: 0 warnings, 1 error
compiling stm32f0xx_gpio.c...
..\gpiotest\core_cm0.h(127): error:  #5: cannot open source input file 
"core_cmInstr.h": No such file or directory
  #include <core_cmInstr.h>                /* Core Instruction Access 
*/
stm32f0xx_gpio.c: 0 warnings, 1 error
compiling stm32f0xx_rcc.c...
..\gpiotest\core_cm0.h(127): error:  #5: cannot open source input file 
"core_cmInstr.h": No such file or directory
  #include <core_cmInstr.h>                /* Core Instruction Access 
*/
stm32f0xx_rcc.c: 0 warnings, 1 error
".\Objects\gpiotest.axf" - 3 Error(s), 0 Warning(s).
Target not created.

Ich gebs auf...

von Hanz mit z (Gast)


Lesenswert?

Es steht doch alles da. Er findet die Dateien nicht. Entweder weil es 
sie nicht gibt oder der Include-Path nicht vorhanden bzw. falsch ist.

Es empfiehlt sich, den kompletten "inc"-Ordner der Lib einzutragen, dann 
muss man auch nicht einzelne Header in das eigene Codeverzeichnis 
kopieren.

core_cm0.h hat er ja nun bereits gefunden. Darin wird dann 
core_cmInstr.h inkludiert, was er wiederum nicht kennt.

von DerM (Gast)


Lesenswert?

Habe jetzt alles aber auch wirklich alles was ich an .c und .h Dateien 
gefunden hab eingebunden aber es tut sich nichts. Die Errors wachsen 
munter weiter....

Rebuild target 'Target 1'
compiling main.c...
stm32f0xx_conf.h(34): error:  #5: cannot open source input file 
"stm32f0xx_adc.h": No such file or directory
  #include "stm32f0xx_adc.h"
main.c: 0 warnings, 1 error
compiling stm32f0xx_gpio.c...
stm32f0xx_conf.h(34): error:  #5: cannot open source input file 
"stm32f0xx_adc.h": No such file or directory
  #include "stm32f0xx_adc.h"
stm32f0xx_gpio.c: 0 warnings, 1 error
compiling Driver_ETH_MAC.c...
Driver_ETH_MAC.c(1): error:  #5: cannot open source input file 
"Driver_ETH_MAC.h": No such file or directory
  #include "Driver_ETH_MAC.h"
Driver_ETH_MAC.c: 0 warnings, 1 error
compiling Driver_ETH_PHY.c...
Driver_ETH_PHY.c(1): error:  #5: cannot open source input file 
"Driver_ETH_PHY.h": No such file or directory
  #include "Driver_ETH_PHY.h"
Driver_ETH_PHY.c: 0 warnings, 1 error
compiling Driver_Flash.c...
Driver_Flash.c(1): error:  #5: cannot open source input file 
"Driver_Flash.h": No such file or directory
  #include "Driver_Flash.h"
Driver_Flash.c: 0 warnings, 1 error
compiling Driver_I2C.c...
Driver_I2C.c(2): error:  #5: cannot open source input file 
"Driver_I2C.h": No such file or directory
  #include "Driver_I2C.h"
Driver_I2C.c: 0 warnings, 1 error
compiling Driver_MCI.c...
Driver_MCI.c(2): error:  #5: cannot open source input file 
"Driver_MCI.h": No such file or directory
  #include "Driver_MCI.h"
Driver_MCI.c: 0 warnings, 1 error
compiling Driver_SPI.c...
Driver_SPI.c(1): error:  #5: cannot open source input file 
"Driver_SPI.h": No such file or directory
  #include "Driver_SPI.h"
Driver_SPI.c: 0 warnings, 1 error
compiling Driver_USART.c...
Driver_USART.c(1): error:  #5: cannot open source input file 
"Driver_USART.h": No such file or directory
  #include "Driver_USART.h"
Driver_USART.c: 0 warnings, 1 error
compiling Driver_USBD.c...
Driver_USBD.c(1): error:  #5: cannot open source input file 
"Driver_USBD.h": No such file or directory
  #include "Driver_USBD.h"
Driver_USBD.c: 0 warnings, 1 error
compiling Driver_USBH.c...
Driver_USBH.c(4): error:  #5: cannot open source input file 
"Driver_USBH.h": No such file or directory
  #include "Driver_USBH.h"
Driver_USBH.c: 0 warnings, 1 error
assembling startup_stm32f0xx.s...
assembling startup_stm32f0xx_ld.s...
assembling startup_stm32f030.s...
assembling startup_stm32f031.s...
assembling startup_stm32f042.s...
assembling startup_stm32f051.s...
assembling startup_stm32f072.s...
assembling startup_stm32f091.s...
compiling Buttons_STM32F0-Discovery.c...
C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 
5531):  error:  #5: cannot open source input file "stm32f0xx_conf.h": No 
such file or directory
    #include "stm32f0xx_conf.h"
C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Boards\ST\STM32F0-Discovery 
\Common\Buttons_STM32F0-Discovery.c:  0 warnings, 1 error
compiling LED_STM32F0-Discovery.c...
C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 
5531):  error:  #5: cannot open source input file "stm32f0xx_conf.h": No 
such file or directory
    #include "stm32f0xx_conf.h"
C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Boards\ST\STM32F0-Discovery 
\Common\LED_STM32F0-Discovery.c:  0 warnings, 1 error
compiling RTX_Conf_CM.c...
assembling startup_stm32f051.s...
compiling system_stm32f0xx.c...
C:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\1.2.0\Device\Include\stm32f0xx.h( 
5531):  error:  #5: cannot open source input file "stm32f0xx_conf.h": No 
such file or directory
    #include "stm32f0xx_conf.h"
RTE\Device\STM32F051R8\system_stm32f0xx.c: 0 warnings, 1 error
compiling FS_Config.c...
C:\Keil_v5\ARM\PACK\Keil\MDK-Middleware\6.2.0\FileSystem\Include\rl_fs_l 
ib.h(14):  error:  #5: cannot open source input file "Driver_Flash.h": 
No such file or directory
  #include "Driver_Flash.h"
RTE\File_System\FS_Config.c: 0 warnings, 1 error
".\Objects\test.axf" - 15 Error(s), 0 Warning(s).
Target not created.

von DerM (Gast)


Lesenswert?

Mittlerweile bin ich wieder in der Ausgangssituation...
Vielleicht erbarmt sich ja doch noch jemand von euch mir weiterzuhelfen.

Rebuild target 'Target 1'
compiling main.c...
main.c(36): warning:  #1-D: last line of file ends without a newline
        }}
main.c: 1 warning, 0 errors
compiling Buttons_STM32F0-Discovery.c...
compiling LED_STM32F0-Discovery.c...
assembling startup_stm32f051.s...
compiling system_stm32f0xx.c...
linking...
.\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_Init (referred 
from main.o).
.\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_StructInit 
(referred from main.o).
.\Objects\test.axf: Error: L6218E: Undefined symbol GPIO_WriteBit 
(referred from main.o).
.\Objects\test.axf: Error: L6218E: Undefined symbol 
RCC_AHBPeriphClockCmd (referred from main.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 4 error messages.
".\Objects\test.axf" - 4 Error(s), 1 Warning(s).
Target not created.

von W.S. (Gast)


Lesenswert?

DerM schrieb:
> Mittlerweile bin ich ratlos.

DerM schrieb:
> Ich gebs auf...

Mittlerweile bin ich geneigt, mit dir GANZ HEFTIG zu schimpfen! Also 
sorry für die folgenden Entgleisungen...

Hör doch ENDLICH auf, zu allererst in irgend einer IDE herumzugeigen und 
irgendwelche SCHEISS-Libs benutzen zu wollen, in die du entweder noch 
nie einen Blick geworfen hast, oder die du beim Betrachten nicht 
verstanden hast.

Also: Lade dir hier aus dem Forum mal die "Lernbetty" herunter und schau 
dir an, wie man sowohl beim Keil als auch beim GCC  die eigentlichen 
Tools (Compiler, Assembler, Linker, Fromelf usw.) SELBST aufruft. Dort 
findest du dann auch Batch-Dateien zum Durchziehen der kompletten 
Übersetzungsläufe und du findest dort auch die .xcl Dateien (eXtended 
Command Line), wo du sehr schön sehen kanst, was alles die jeweiligen 
Tools angeboten kriegen müssen, um korrekt zu funktionieren.

Lerne daraus.

Du wirst dann sehr schnell sehen, daß du für den Fall, daß du irgend 
eine Fremd-Lib wie z.B. diese unsägliche ST-Lib zu benutzen gedenkst, 
selbige eben auch mit kompilieren mußt, um die daraus entstehenden 
Objektfiles ( *.o oder *.obj) zu erzeugen - und daß du diese dem Linker 
eben auch mit anbieten mußt.

Mein Rat: Lerne zu allererst den Controller kennen, dann die 
eigentlichen Tools kennen und fange erst danach an, mit irgendwelcher 
Zusatz-Software wie IDE, Fremdlibs usw. herumzuwurschteln.

W.S.

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.