打印

中断为什么跳到startup_stm32f40xx.s里面的而不是stm32f4xx_it.c的

[复制链接]
6360|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nicholasldf|  楼主 | 2013-8-28 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用IAR开发,中断为什么跳到startup_stm32f40xx.s里面定义的中断函数,,而不是stm32f4xx_it.c里面定义的中断函数?
根据IAR编译器文档,startup_stm32f40xx.s里面定义的中断函数都是PUBWEAK,,意思是如果另外定义了同名函数,则PUBWEAK属性的函数失效。

但是st例程里面的是正常的,如果在stm32f4xx_it.c里面定义了中断函数,则不会跳到startup_stm32f40xx.s里面定义的中断函数。

具体要设置哪里呢?以前使用MDK也有这样的问题。

我的解决方法是,将startup_stm32f40xx.s里面除reset_Handler之外的所有中断函数删除,,全部在stm32f4xx_it.c里面定义。。。。

但心里总有疑问,不爽啊,,找了网上别人遇到的,都没有解决这个问题。。
沙发
nicholasldf|  楼主 | 2013-8-29 23:20 | 只看该作者
现在还是why

使用特权

评论回复
板凳
airwill| | 2013-8-30 09:30 | 只看该作者
没有定义的默认中断才会在 startup_stm32f40xx.s 里面.

我写的软件反对使用 stm32fXxx_it.c 文件. 中断函数作为某个功能实现的一部分, 应该在该功能的源代码文件里. 不应该单独吊出来, 放在 stm32fXxx_it.c 文件中, 这不符合模块化分割的要求.
所以, 我写的软件是没 stm32fXxx_it.c  文件的.

使用特权

评论回复
地板
bbstr| | 2013-8-30 09:36 | 只看该作者
反编译下你的二进制文件,看看链接进去的是哪个
还有就是看看代码,看看你写的中断向量地址那里给的是哪个文件里的中断处理函数

使用特权

评论回复
5
nicholasldf|  楼主 | 2013-8-30 09:38 | 只看该作者
问题是在stm32f4xx_it.c定义同名中断服务函数,,但是中断还是跳往startup_stm32f40xx.s里面的默认中断服务函数

中断全部放在stm32f4xx_it.c,,,好处就是统一管理中断处理函数,,如果要模块化,,可以在中断函数里面调用模块具体的中断处理服务函数,,,

使用特权

评论回复
6
ilikerome| | 2015-7-3 12:04 | 只看该作者
问题是在stm32f4xx_it.c定义同名中断服务函数,,但是中断还是跳往startup_stm32f40xx.s里面的默认中断服务函数

我也遇到了这样的问题。。。

LZ后来咋搞的?

使用特权

评论回复
7
ww260| | 2015-8-22 12:40 | 只看该作者
我也遇到这个问题了。纠结了一个晚上了,一直没搞定,所有函数名字,变量定义都正确,就是进不了stm32f10_it.c的中断。

使用特权

评论回复
8
zchong| | 2015-8-22 18:53 | 只看该作者
没加到工程里?

使用特权

评论回复
9
sn4305| | 2016-8-4 21:38 | 只看该作者
我去, 新手一个,遇到同样的问题,搞了一个星期了,还没解决。。。       看了上面的评论后有个猜想:会不会IAR 的编译器没有识别,在编译时没有把新的自己定义的中断函数位置赋给PC?
有大神看到的话麻烦指点一下。

使用特权

评论回复
10
sn4305| | 2016-8-4 22:55 | 只看该作者
sn4305 发表于 2016-8-4 21:38
我去, 新手一个,遇到同样的问题,搞了一个星期了,还没解决。。。       看了上面的评论后有个猜想:会不 ...

MD  终于搞定了,我中断函数SysTick_Handler() 放在Main() 里面,  函数名写错了。。。写成SysTick_Handle()。。。   改了之后搞定!      Lz 遇到的情况可能和我不一样,可能是IAR编译配置问题, option-> c/c++ complier-> language: Multi-compilation记得勾选

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

261

帖子

10

粉丝