打印
[STM32F1]

【问题探讨】对比试验后,谈谈stm32单片机中断程序中加延时可能引发程序死机问题

[复制链接]
4510|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
970253146|  楼主 | 2016-10-5 09:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我很少在中断函数里面调用延时程序,主要是最初接触单片机的时候前辈们就这样教的。说程序容易跑飞,之前也一直没出现过这样的情况。最近做一个东西,无意中在中断中加了一个us级的延时,用for();去做的,结果程序真的跑飞了,主程序直接死在某个位置不动了。我本来以为是,这个中断有特殊要求,必须以最快的速度结束中断并返回。后来呢,我就把那个for延时改成了个printf,给上位机发送几个字符,结果发现程序这次没死了。还有,我把某些用于计算的子函数放到中断里面调用,而这些子函数运行的时间,绝对要比for(x=0;x<5;x++)要长多了。。。。

我起初是以为这个中断执行的时间不能超过for(x=0;x<5;x++),超过就会出错,只是后来的试验反驳了这个观点。
那就提个问题大家看一下,为什么这个延时会导致程序跑飞呢?
沙发
mmuuss586| | 2016-10-5 10:41 | 只看该作者
你加在哪个中断程序里啊?

使用特权

评论回复
板凳
shcshc1234| | 2016-10-5 20:04 | 只看该作者
卡在中断里了吧比如1ms一个中断中断里有一个10ms延时

使用特权

评论回复
地板
zhaolei2612| | 2016-10-5 20:50 | 只看该作者
中断程序能贴上来么

使用特权

评论回复
5
icecut| | 2016-10-5 21:14 | 只看该作者
汗啊...让我无话可说.中断加延时会跑飞,你跟那个三脚猫学的?

使用特权

评论回复
6
970253146|  楼主 | 2016-10-5 22:54 | 只看该作者
mmuuss586 发表于 2016-10-5 10:41
你加在哪个中断程序里啊?

是一个ad中断,ad转换完成中断,中断中是有清标志位的

使用特权

评论回复
7
970253146|  楼主 | 2016-10-5 22:55 | 只看该作者
shcshc1234 发表于 2016-10-5 20:04
卡在中断里了吧比如1ms一个中断中断里有一个10ms延时

不是的,中断频率2k,而延时只有几个us

使用特权

评论回复
8
970253146|  楼主 | 2016-10-5 22:57 | 只看该作者
icecut 发表于 2016-10-5 21:14
汗啊...让我无话可说.中断加延时会跑飞,你跟那个三脚猫学的?

不一定会跑飞,我也试过有些中断里面加过的。只是这次恰好遇到了这个问题,所以提出来

使用特权

评论回复
9
970253146|  楼主 | 2016-10-5 22:59 | 只看该作者
icecut 发表于 2016-10-5 21:14
汗啊...让我无话可说.中断加延时会跑飞,你跟那个三脚猫学的?

那你觉得是什么原因呢,中断中把那个延时换成别的子程序,就一切都可以运行。而且那个子程序运行的时间要比那个for循环要长的

使用特权

评论回复
10
290399937| | 2016-10-6 08:05 | 只看该作者
你的FOR循环是个死循环

使用特权

评论回复
11
mcu5i51| | 2016-10-6 09:01 | 只看该作者
只要没有冲突,就不会出问题;要注意的是正常退出之前不要重复进入

使用特权

评论回复
12
icecut| | 2016-10-6 18:20 | 只看该作者
970253146 发表于 2016-10-5 22:57
不一定会跑飞,我也试过有些中断里面加过的。只是这次恰好遇到了这个问题,所以提出来 ...

这次遇到肯定是其他问题.要是有问题你早就遇到了.并且不会这么让你迷茫

使用特权

评论回复
13
kejian2000| | 2016-10-7 10:51 | 只看该作者
for里面有静态货全局变量?

使用特权

评论回复
14
970253146|  楼主 | 2016-10-9 11:47 | 只看该作者
kejian2000 发表于 2016-10-7 10:51
for里面有静态货全局变量?

没有静态的,但是for里面的i=0;i<5的i是个全局变量

使用特权

评论回复
15
kejian2000| | 2016-10-11 19:47 | 只看该作者
970253146 发表于 2016-10-9 11:47
没有静态的,但是for里面的i=0;i

这个i在其他地方也在使用吧

使用特权

评论回复
16
970253146|  楼主 | 2016-10-12 17:12 | 只看该作者
统一回复一下大家,问题解决了。解决的办法是换了一块stm32,一模一样的程序,一开始我自己也不相信,后来找了玩stm32比较厉害的同学来一起分析,他们也说第一次见到这样的情况,换个芯片,中断里面加的延时,只要低于中断频率,随便加什么,结果都是正确的,现在怀疑是板子干扰或者是该板子稳定性不好,确实是第一次见到这样的情况。谢谢大家

使用特权

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

本版积分规则

93

主题

289

帖子

5

粉丝