Hello, I'm new in this environment and I found a problem. I'm using uVision 5.33: I made a empty project, and in the management I inserted CMSIS Core, RTOS2 (API) Keil RTX5, STM32Cube HAL, STM32CubeMX. I didn't write nothing, I compiled the program without modification, and three errors appeared:
- Error: L6200E: Symbol SysTick_Handler multiply defined (by irq_cm0.o and stm32f0xx_it.o)
- Error: L6200E: Symbol PendSV_Handler multiply defined (by irq_cm0.o and stm32f0xx_it.o)
- Error: L6200E: Symbol SVC_Handler multiply defined (by irq_cm0.o and stm32f0xx_it.o)
Can someone help me?
Thanks
This really is a horrible abuse of the English language; ARM - a Cambridge company, no less - should be ashamed of it!
When they say "multiply defined" they mean that there are multiple definitions of the symbols
The error messages tell you where those multiple definitions are:
Giuseppe said:irq_cm0.o and stm32f0xx_it.o
irq_cm0.o is the object file produced by compiling irq_cm0.c;
stm32f0xx_it.o is the object file produced by compiling stm32f0xx_it.c.
So you need to look at those two source files and decide which is the definition to keep, and which it the one to remove.
EDIT
Note that this is general C stuff - not specific to Keil or ARM.
Andy Neil said:This really is a horrible abuse of the English language
sadly, it's been that way for ages: https://community.arm.com/developer/tools-software/tools/f/keil-forum/32661/error-l6200e-symbol-multiply-defined/93489#93489
Thank you for the answer. Yes, I know that if I remove one definition of them the program should be linked well, but I don't understand if it is normal that an autogenerated code produces two definitions of the same function. These definitions wasn't made by myself, I didn't do anything, simply I selected the modules that was necessary for the program and I compiled the autogenerated code. Is the modification of the autogenerated code normal in this environment?
What "auto generator" are you using?
It clearly shouldn't happen - because the result cannot build.
either you've just chosen an incompatible set of options, or you've missed some configuration setting.
In Project -> Manage -> Run-Time Environment I choose the software components: CMSIS Core, RTOS2 (API) Keil RTX5, STM32Cube HAL, STM32CubeMX. Then uVision (and STM32Cube) creates some files (and a main), I don't do anything. I try to compile the software created by uVision and there are the link errors of multiply definitions.
You must have an incompatible set of components, then.
You know what source files the multiple definitions are coming from - so it should be easy to find which of those "components" they belong to?
I would imagine that the STM32Cube stuff would include the CMSIS Core.
You need to study the STM32Cube documentation for details; that's an ST thing - nothing to do with Keil or ARM.
AIUI, if you're using Cube to create your project then you should just import whatever that creates into Keil - not be adding stuff to it - but you need to check the ST documentation for the correct procedure.
Giuseppe said:multiply definitions
They are multiple definitions - not multiply definitions.
Thank you. Yes, multiple definitions, English is not my language, I'm latin.
Giuseppe said:English is not my language
If only ARM had that excuse ...:(
There are options when you generate the Cube code to have it not generate handlers for these 3 interrupts. They are generated by default so you need to go in and deselect generating them. The RTOS2 RTX (or any RTOS you use) MUST be the one to handle these interrupts.
community.arm.com/.../rtx5-inclusion