查看: 2946|回复: 2

[解BUG] MSP430异常复位

[复制链接]
  • TA的每日心情
    开心
    2014-4-11 10:00
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-11-5 14:05:20 | 显示全部楼层 |阅读模式
    分享到:
    网上看到的,对咱们有些帮助。

    大家擦亮眼睛,一大批文字火速袭来~~~

    前段时间调试的时候遇到的一个莫名其妙的问题,后来费了很多周章才解决,现把问题贴出来,可能有的网友已经遇到过,愿能给

    更过的网友一点帮助吧。


    问题现象:


           MSP430无故复位,单步调试发现复位的地方还和代码无关。也就是可能在这个地方复位,也可能在那个地方复位。


    问题排查:


         我在单步调试复位的地方,加死循环延时,结果在死循环内复位了。不加延时,就在别的地方复位了。跟我的感觉就是好像是和处理的时间有关(当然前面已经排查过N种情况)。与时间最有关的是看门狗,但是我的代码第一行就是标准的停狗代码


            WDTCTL = WDTPW + WDTHOLD;


           按理看门狗不应该会复位才对。


           问题还得解决,要先排除看门狗,得先弄清楚看门狗,查官方资料得知430默认看门狗是开启的,也就是,如果是看门狗复位,只可能是在我关狗之前就时间溢出了。如果不是看门狗,就得另寻它路了。关狗之前就时间溢出?这段时间系统在干什么?经过查找资料,知道C语言在初始化中会对变量初始化,那如果有大量的变量需要初始化那有可能就是溢出的原因了。因此我把代码中,用到的2K的缓存数组去掉,程序又恢复了活力!!!


           看来果然是看门狗的问题,问题找到了,事情就好解决了,以下列出我找到的两种解决方法。


    问题总结:

            MSP430上电默认看门狗开启,而C语言在上电时需要初始化变量,如果有大量缓存变量,初始化的时间就有可能导致喂狗不及时,而出现看门狗复位。



    问题解决:

            两种方法可以解决:

            1. 上电时不初始化变量。IAR中,只需在大缓存数组前增加“no_init”,例如 no_init unsigned char Wave[512]; 那么上电后就不会对该数组进行初始化。

            2. 修改启动代码。 程序首先运行的是启动代码,因此在启动代码中关闭看门狗,也能解决问题。

            启动文件位于IAR安装文件下D:\Program Files\IAR Systems\Embedded Workbench 5.4 Evaluation\430\src\lib\430\cstartup.s43

            将cstartup.s43添加进你的工程并打开。可以看到里面有:

            #ifdef DISABLE_WATCHDOG

            MOV     #WDTPW + WDTHOLD, &WDTCTL

            #endif

            官方已经考虑到这个问题了,因此,你只需要在最前面宏定义DISABLE_WATCHDOG了。

            #define DISABLE_WATCHDOG
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-7-16 16:03
  • 签到天数: 751 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-11-5 17:02:31 | 显示全部楼层
    学习了,谢谢分享!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-7 11:49
  • 签到天数: 2193 天

    连续签到: 33 天

    [LV.Master]伴坛终老

    发表于 2013-11-5 21:25:14 | 显示全部楼层
    谢谢分享!!!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-18 09:13 , Processed in 0.142282 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.