[应用相关] 程序运行有时候就会跑飞而自动重启

[复制链接]
2704|18
 楼主| zhuww 发表于 2014-10-30 12:10 | 显示全部楼层 |阅读模式
功能比较复杂的程序,开启了TIM1、Tim2、TIM3、TIM4 中断以及CAN通讯的接收中断,当把所有定时器中断屏蔽的时候,测试CAN通讯完全没有问题,程序在不使用通讯的时候运行也完全没有问题,可是当进行CAN通讯而且开启各个定时器中断的时候,程序运行有时候就会跑飞而自动重启。。。。。
应该怎么解决呢?
zhanglli 发表于 2014-10-30 12:11 | 显示全部楼层
你不要吓我,我还准备开12个呢。
lium 发表于 2014-10-30 12:12 | 显示全部楼层
把CAN中断优先级设置低点
guoyt 发表于 2014-10-30 12:13 | 显示全部楼层
中断多时,尽量把中断任务简短。比如仅仅置一个标志位。然后在主程序或线程中,处理消息或标志。
hanwe 发表于 2014-10-30 12:19 | 显示全部楼层
一般要不就是中断等级没有设置好造成的,要不就是中断处理程序过长,一般建议在main程序中统一调度,中断程序不要过多处理
 楼主| zhuww 发表于 2014-10-30 12:24 | 显示全部楼层
zhanglli 发表于 2014-10-30 12:11
你不要吓我,我还准备开12个呢。


额。。好多,我这里确实是这种问题,感觉就是中断的问题呀
zhanglli 发表于 2014-10-30 12:26 | 显示全部楼层
如果说中断中代码过多不会跑飞,但会死机;跑飞应该是硬件不稳定。
mmuuss586 发表于 2014-10-30 12:26 | 显示全部楼层
程序初始化哪里有问题吧,可能找不到定时器中断;
lium 发表于 2014-10-30 12:26 | 显示全部楼层

实际上,我还开了一个CAN,3个串口,一个USB;
挂了FSMC总线,都没问题。
我用407
 楼主| zhuww 发表于 2014-10-30 12:28 | 显示全部楼层

哦,那问一下,您对中断的处理,优先级的设置是什么样的呢?还有在中断中的操作,是有操作很多,还是仅仅置位,然后在主函数中进行操作呢?
 楼主| zhuww 发表于 2014-10-30 12:28 | 显示全部楼层

能不能解释一下?程序死机和跑飞具体是什么吗?一直以为死机就是跑飞。。。。。
wangpe 发表于 2014-10-30 12:28 | 显示全部楼层
中断中的变量尽量不要在主程序里改变,这样就可避免。还有中断的开关也不要在主程序频繁发生
langgq 发表于 2014-10-30 12:30 | 显示全部楼层

死机是指由于条件未满足程序进入了死循环(卡在某个地方出不来了) 跑飞是指收到外界的干扰导致程序没有按照设计的顺序执行
llia 发表于 2014-10-30 12:30 | 显示全部楼层
说说我最近的一个自动重启的例子,数组下标越界,楼主查查,还有一个异常状况是读取指针数值之前,指针未定义,有些问题,编译软件也不会报错的
yufe 发表于 2014-10-30 12:32 | 显示全部楼层

优先级都按默认设置,说白了都没设置。
中断程序:我都没几句,只接收程序。
所有任务都放中断处理。
程序大的话,可以加个操作系统。
 楼主| zhuww 发表于 2014-10-30 12:32 | 显示全部楼层

我把所有中断处理函数的开头都加上了关闭总中断,处理结束后再开启总中断,就不会出现这种问题了,不过感觉这么改不是个办法呀
guoyt 发表于 2014-10-30 12:34 | 显示全部楼层

估计你中断干的事情太多了,不关,中断响应不过来,导致及时清中断标志位。
lium 发表于 2014-10-30 12:35 | 显示全部楼层

就是你在中断里计算应用的那些变量
jxmzzr 发表于 2014-10-30 13:02 | 显示全部楼层
在中断服务程序中可以用软件来清除中断请求标志位。

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

本版积分规则

893

主题

8252

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部