OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2494|回复: 8

CMSIS-RTOS工程中添加stm32f10x_it.c后出现函数重复定义的问题

[复制链接]

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-8-9 17:32:20 | 显示全部楼层 |阅读模式
1金钱
1.新建了一个CMSIS-RTOS模板工程,工程中不添加stm32f10x_it.c文件时候,编译通过。
2.添加stm32f10x_it.c后编译出现函数重定义错误。这是为什么?
3.如果按照错误提示,把stm32f10x_it.c文件中提示重定义的函数注释掉后是否还能正常响应中断呢?或者说这种注释掉函数来解决问题是不是一种正确的做法呢?(因为我想既然是stm32f10x_it.c写好的中断函数还是不要私自修改比较好)
4.提示错误如图所示
QQ截图20180809172451.png

最佳答案

查看完整内容[请看2#楼]

删掉 stm32f10x_it.c 里面重复的 PendSV、SVC 和 SysTick 异常是正确的做法。 stm32f10x_it.c 可以理解成是程序框架的一部分,如果你用 RTE 配置 CMSIS-RTOS 的话相当于使用另一套程序框架了,按理说是个二选一的问题。 稍深层次上说,这三个异常从设计上是给 RTOS 用的,Arm 的框架倾向于由 CMSIS-RTOS 完全接管,用户应用如果没有按照这个思路而意外使用了它们的话会有冲突。
没有脑袋
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2018-8-9 17:32:21 | 显示全部楼层
删掉 stm32f10x_it.c 里面重复的 PendSV、SVC 和 SysTick 异常是正确的做法。

stm32f10x_it.c 可以理解成是程序框架的一部分,如果你用 RTE 配置 CMSIS-RTOS 的话相当于使用另一套程序框架了,按理说是个二选一的问题。
稍深层次上说,这三个异常从设计上是给 RTOS 用的,Arm 的框架倾向于由 CMSIS-RTOS 完全接管,用户应用如果没有按照这个思路而意外使用了它们的话会有冲突。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-9 19:23:50 | 显示全部楼层
楼上正解,
其实stm32f10x_it.c这个文件删除都没有关系的。它所定义的中断函数都是空的,实际在启动文件中已经用weak弱定义的方式定义过了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-8-10 09:02:06 | 显示全部楼层
K.O.Carnivist 发表于 2018-8-9 17:32
删掉 stm32f10x_it.c 里面重复的 PendSV、SVC 和 SysTick 异常是正确的做法。

stm32f10x_it.c 可以理解 ...

好  我明白了
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-8-10 09:03:30 | 显示全部楼层
warship 发表于 2018-8-9 19:23
楼上正解,
其实stm32f10x_it.c这个文件删除都没有关系的。它所定义的中断函数都是空的,实际在启动文件中 ...

冲突的函数我注释掉就好了,文件的话还是留着吧,我比较倾向于中断函数统一在那里管理
没有脑袋
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4524
金钱
4524
注册时间
2018-5-11
在线时间
947 小时
发表于 2018-8-10 09:16:32 | 显示全部楼层
本帖最后由 warship 于 2018-8-10 09:19 编辑
美丽的时光机器 发表于 2018-8-10 09:03
冲突的函数我注释掉就好了,文件的话还是留着吧,我比较倾向于中断函数统一在那里管理

这个就见仁见智了。
我开始也是和你一样,
但后来发觉这样的结构模块化比较差,移植起来很困难。
比如说串口中断,你把串口的初始化及相关处理写在一个文件,
而串口中断服务集中写在stm32f10x_it.c(如果有共用的变量还得声明外部,调试修改串口代码的时候也得从两个地方来回切换看),
当你在另一个项目想移植串口代码的时候,得从两个地方找代码,再分别复制到新工程的两个地方,不觉得麻烦吗?
而把串口中断和串口的初始化及相关处理集中写在同一个文件usart.c中,
移植的时候只须把这个文件加进来就行了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-8-10 09:44:07 | 显示全部楼层
库里他是唯一一个能被编辑的(虽然把只读去掉别的也能修改),而且被别的库给排斥在外。我也是经常把他删掉的,要用哪个中断入口自己再写呗
猪猪熊呢?
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-8-10 09:52:17 | 显示全部楼层
warship 发表于 2018-8-10 09:16
这个就见仁见智了。
我开始也是和你一样,
但后来发觉这样的结构模块化比较差,移植起来很困难。

很有道理,今后我要站在你们经验的基础上走
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
 楼主| 发表于 2018-8-10 09:52:57 | 显示全部楼层
323232 发表于 2018-8-10 09:44
库里他是唯一一个能被编辑的(虽然把只读去掉别的也能修改),而且被别的库给排斥在外。我也是经常把他删掉 ...

赞成你的做法
没有脑袋
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 19:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表