stm32的SysTick_Handler()等中断处理函数的重复定义

2019-07-14 18:19发布

项目工程里使用了RTX实时内核,包含了RTX.lib的库文件,其它关于添加文件到工程目录,初始化等都按常规方式操作,最后编译说提示如下错误信息:
linking...
.STM3210E-EVALSTM3210E-EVAL.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by hal_cm3.o and stm32f10x_it.o).
.STM3210E-EVALSTM3210E-EVAL.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by hal_cm3.o and stm32f10x_it.o).
.STM3210E-EVALSTM3210E-EVAL.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by hal_cm3.o and stm32f10x_it.o).
.STM3210E-EVALSTM3210E-EVAL.axf: Not enough information to list image symbols.
.STM3210E-EVALSTM3210E-EVAL.axf: Not enough information to list the image map.
.STM3210E-EVALSTM3210E-EVAL.axf: Finished: 2 information, 0 warning and 3 error messages.
Target not created

        把stm32f10x_it.c文件里的SVC_Handler、PendSV_Handler、SysTick_Handler三个函数注释掉,则编译时不报错,但程序在硬件上运行不起来,烦请各高手指教!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
maruidiyi
1楼-- · 2019-07-15 01:00
楼主的HAL_CM3是从哪里来的,把里面的SVC_Handler、PendSV_Handler、SysTick_Handler 注释掉才对,stm32f10x_it.C里面的中断函数时不能注释掉的。CMSIS里面的是 core_cm3.c,你看看hal_cm3是否是这个修改的呢?
60user147
2楼-- · 2019-07-15 06:03
hal_cm3是什么函数,它和stm32f103_it有函数重复定义,你好好检查,还有你说的那个库文件,没法看底层,可能也会有重定义。
quanmeng86
3楼-- · 2019-07-15 11:21
这是函数重定义,因为你的相关头文件互相包含,导致相关定义多次被编译,导致MDK认为重定义了。
建议重新梳理你的头文件,把重复包含的删掉
60user121
4楼-- · 2019-07-15 12:19
 精彩回答 2  元偷偷看……
freesea123
5楼-- · 2019-07-15 13:54
既然是.o文件里链接出的问题,那么就说明.c文件里重复定义了同一个函数名称。
把stm32f10x_it.c文件里的SVC_Handler、PendSV_Handler、SysTick_Handler三个函数注释掉
以上这个方法是可行的,说明你的程序还是有问题。跑不起来跟前面这个问题没关系
UserMen
6楼-- · 2019-07-15 15:08
函数名被重复定义,因为你使用了RTX,stm32f10x_it.c中这几个函数你必须注释掉,要不RTX就没法运行了,如果不能运行应该是你的程序有点问题,是不是RTX没有正常初始化啊,或者你没用RTX却挂了它的库,不知道你程序啥样的。

一周热门 更多>