430f149为什么么加了看门狗还是偶尔有无法重启的问题

[复制链接]
 楼主| guan_hui 发表于 2012-8-14 22:00 | 显示全部楼层 |阅读模式
有没有使用F149的大虾啊,请教点问题哦,在我开发的产品里,现在遇到一些比较棘手的问题,请高手分享下经验:
    现开发的产品需要考虑低功耗,所有大部分处于休眠状态,定时唤醒,又因为速率关系,主要是用于RFID,所有现用的是8M运行,PCB设计的时候没有预留32K晶振 ,考虑到设备休眠和8M晶振看门狗溢出时间太短,所以我在看门狗这块是这样使用的,在定时器里面自增一个变量,在单片机醒来时在while里面将该变量清零,如果判断到该变量大于某个值(大于休眠时间的一个值)时测认为程序跑飞了,这个时候我在定时器里打开看门狗等着看门狗溢出使设备重启,但现在的情况时,大部分时间设备都可以正常重启,但有时候设备死掉就无法重启了,估计是定时器死掉了,现求高手支招,在我的这款产品需求下,看门狗这块我如何处理呢,不想加外部看门狗,主要是功耗问题
figo20042005 发表于 2012-8-14 23:06 | 显示全部楼层
你要查看下它到底死在哪了,这样就比较容易重启
leaderpig 发表于 2012-8-14 23:47 | 显示全部楼层
不懂,坐等
leaderpig 发表于 2012-8-14 23:47 | 显示全部楼层
哈哈
dxb_dxb 发表于 2012-8-23 20:29 | 显示全部楼层
我们的产品要求的也是低功耗,同样用的是F149,最好把看门狗加上,没有多大的功耗的,如果不想加看门狗,就来个手动复位电路吧!(这样有点麻烦)我们的产品在测试的时候有一次真的死翘翘了,当时也测过了,看门狗喂狗复位信号给出了,可是还是不能复位。可能是焊接的问题吧!所以还是加个“保险”吧
shenmu2012 发表于 2012-8-24 09:37 | 显示全部楼层
楼主加上看门狗的,然后单步、多步的仿真调试的看看,就可知道程序死到哪了啊
 楼主| guan_hui 发表于 2012-8-24 22:44 | 显示全部楼层
已经确认过了,一般死的话是定时器挂掉了,设计的产品用主要是915MHZ,GPS和GSM三者的集成应用,同时对RFID的实时性要求很高,现选用F149略感吃力,时序多了,长时间运行比较容易导致定时器死掉
hansonhe 发表于 2012-8-26 23:10 | 显示全部楼层
如果定时器跑飞最好确认PC指针飞到哪儿去了?是仿真调试确认的吗?这里有个建议:楼主目前的代码编译后还有多少Flash空间?建议搂住剩余的Flash全部填充为空指令。
 楼主| guan_hui 发表于 2012-8-29 22:07 | 显示全部楼层
现在最头疼的是就是很难扑捉到这个点,一般连续运行一两天是没问题的,但时间一长就死机了,我是在定时器里面开狗的,能很明显看到系统死机后自动重启,但是长时间运行48小时以上,就彻底死了,没法自动重启
wjzx111056 发表于 2012-8-30 22:03 | 显示全部楼层
单步调试看看吧!我的建议是最好是把你的代码进行优化!这样代码简洁更利于解决问题。
   代码优化的原则有:1、选择合适的算法和数据结构
                     2、使用尽量小的数据类型能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。
                      3、使用自加、自减指令
                      4. 减少运算的强度,可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。
                      5.用移位实现乘除法运算
永远的不知 发表于 2012-8-31 14:04 | 显示全部楼层
1# guan_hui
如果用内部看门狗,看门狗定时器和mclk是用的一个时钟源吗?最好不要用同意时钟源。
另外,你的看门狗复位逻辑也有些问题,如果程序跑飞了,有可能根本不执行你大于某个值的判断。
zhl100 发表于 2012-8-31 21:36 | 显示全部楼层
430中断不能嵌套,中断地方定住了,就出不来
figo20042005 发表于 2012-9-4 21:20 | 显示全部楼层
LZ查到问题所在了没?分享下
 楼主| guan_hui 发表于 2012-9-5 23:28 | 显示全部楼层
11# 永远的不知
我是在定时器里自增某个变量,在while里清零,同样是在定时器里判断这个值,如果跑飞了,就没法清零,同样如果定时器挂了,就没法喂狗,只要二者有其一不满足,就会复位,还有楼下那位,430中断可以嵌套,在进入中断后,手动打开中断开关就行。纠结了很久始终都没法有效解决,目前就只能加上外部狗用,经反复测试,确定是中断过多所致,产品包含了GPS,GSM,RFID三大模块,处理起来,f149很吃力,关闭一些中断后,无法重启的问题就没有,二代产品已改用STM32来做,现在已经测试OK了,连续老化1周没出问题 ,呵呵,我早就该换的,用f149的时候,经我反复优化,内存还是接近2K,不要与资源较劲了
 楼主| guan_hui 发表于 2012-9-5 23:29 | 显示全部楼层
11# 永远的不知
我是在定时器里自增某个变量,在while里清零,同样是在定时器里判断这个值,如果跑飞了,就没法清零,同样如果定时器挂了,就没法喂狗,只要二者有其一不满足,就会复位,还有楼下那位,430中断可以嵌套,在进入中断后,手动打开中断开关就行。
happybird21 发表于 2012-9-7 17:05 | 显示全部楼层
编写一些中断测试程序试试吧,有时候程序会跑飞
firstblood 发表于 2012-9-7 18:09 | 显示全部楼层
建议楼主检查下供电的电源部分的啊,供电不正常也会引起死机的
GG_GG 发表于 2012-9-8 09:21 | 显示全部楼层
时钟配置的问题吧!
梅花望青竹 发表于 2012-9-8 21:52 | 显示全部楼层
肯能变量处理的问题
51xlf 发表于 2012-9-9 10:40 | 显示全部楼层
看看变量变化的时候,是否超出了变化范围
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

10

帖子

0

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