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) {
}}
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.
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 **** :/
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.
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));
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.
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.
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.