查看: 2825|回复: 1

MSP430复位的几种情况

[复制链接]
  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2012-8-23 13:39:48 | 显示全部楼层 |阅读模式
    分享到:
    1.看门狗超时复位
    由于没有及时喂狗或在程序一开始没有关闭看门狗,导致看门狗溢出复位。在调试阶段应该屏蔽看门狗,在程序的一开始使用WDTCTL = WDTPW + WDTHOLD; 语句关闭看门狗。
    2.堆栈溢出复位

    如果堆栈溢出导致复位,你应该感到庆幸,庆幸你发现了。在程序编译完成后应该看map,查看当前堆栈使用情况,430的22×2和2471堆栈都是默认80B,可以开启堆栈使用量报警。按照老鸟的说法,自己使用了多少堆栈自己心里应该清楚。对于我们这样的菜鸟,我说,编译器清楚,呵呵。
    3.电压不够等问题导致复位
    由于430的USB debug可以提供电源,所有有时候目标板就会忘了接电源,而当程序运行到某些地方,开启某些设备的时候,debug供电不足,就会导致复位。怕自己忘记的方法就是,对于板子上有大电流的,烧录接口一律改为Target供电。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-8-23 15:37:28 | 显示全部楼层
    从网上找的经验~~感觉特别有用  解决了堆栈溢出的难题~~~

    最近在调试TimerA和TimerB的时候,总会出现以下问题:
    The stack 'Stack' is filled to 100% (80 bytes used out of 80). The warning threshold is set to 90.%

    这个问题以前出现过,糊里糊涂解决了,只知道:一出现这个问题,肯定是开了中断但是没有中断处理函数导致,但是具体不知道是哪个问题导致的!

    现在又一次遇到,打算把它彻底解决掉。

    还是沿着 没有中断处理函数这个思路走下去,先看一下TimerB的初始化:
    • void TimerBIni()
    • {
    •     //add
    •     TBCTL=TBSSEL1+TBCLR;//Reset TimerA
    •     TBCCTL0|=CCIE;
    •     TBCCR0=TimerBCount;//1.9KHz
    •     TBCTL|=TBSSEL1+TBIE+MC0;//SMCLK,divider:0,up Mode,Interrupt enable
    • }

    • #pragma vector = TIMERB0_VECTOR
    • __interrupt void TimerBInter(void)
    • {
    •     //add
    •     if(TimerBIntCount<31)
    •     {
    •         TimerBIntCount++;
    •     }
    •     else
    •     {
    •         //1S周期处理,添加代码
    •         //CPU1StageLEDBlink();
    •         TimerBIntCount=0;
    •     }
    • }


    在某一次尝试过程中,发现把TBIE去掉就OK了,而且刚好TBIE是一个开关中断的控制位,这时茅塞顿开,马上开始查找TimerB的中断的所有资料。

    在查看一翻以后,得知TimerA和TimerB 都有两个中断标志,一个是CCIFG,TXIFG,其中TXIFG是由TXIE来启动的,马上见到曙光了。查看了一下MSP430的中断向量表得知:
    TBIVContents       Interrupt Source       Interrupt Flag                    Interrupt Priority
    00h                           No                     interrupt pending --
    02h                   Capture/compare1        TBCCR1 CCIFG                      Highest
    04h                   Capture/compare2        TBCCR2 CCIFG
    06h                   Capture/compare3†      TBCCR3 CCIFG
    08h                   Capture/compare4†      TBCCR4 CCIFG
    0Ah                   Capture/compare5†      TBCCR5 CCIFG
    0Ch                   Capture/compare6†      TBCCR6 CCIFG
    0Eh                   Timer overflow                  TBIFG                               Lowest

    看到上面的大概明白了吧,我的中断函数为TBCCR0的处理函数,而开启TBIE,就要通过TBIV来处理中断还是,而我的没有。所以才会出现堆栈溢出,

    这个问题这下子终于解决了。哈哈哈哈啊哈。

    问题总结:只要提示堆栈溢出的错误,大部分都是因开启了中断但没有对应的中断处理函数导致!!

    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-8 19:38 , Processed in 0.116614 second(s), 16 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.