您的位置 首页 FPGA

msp430程序跑飞原因和处理方法堆集

1中断或主函数中有死循环,现象是程序停在某处。2堆栈溢出。现象是程序跑飞。********************************************************

1.中止或主函数中有死循环,现象是程序停在某处。

2.仓库溢出。现象是程序跑飞
**************************************************************************************************

3、是否开了中止可是没有用。如:

开了中止:

TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCTL1 = CCIE; // CCR1 interrupt enabled//时刻周期1使能
TA0CCTL2 = CCIE; // CCR2 interrupt enabled//时刻周期2使能
TA0CCTL3= CCIE; // CCR3 interrupt enabled//时刻周期3使能

可是:

定时器中:

case 4: TA0CCTL2 = CCIE;)和 case 6: TA0CCTL3= CCIE;)内没有处理的程序。

……
case 2:
TA0CCR1 +=1024; // Add Offset to CCR2
SecondReach=1;
CountToMunite++;
Rquestinterval++;
SecondTimecount++;
break; // CCR4 not used
case 4:
break;
case 6:
break;
case 8:
break; // CCR3 not used
……

4、数组越界。界说的数组只要50个单元,可是程序运转的过程中,却给他赋给50+个单元。

处理方法:
A.看中止有没有用 _EINT(),引起中止嵌套.
B.Project–Options–General Options—Stack/Heap 将Stack size设置大一些。 (仓库溢出)
3.中止耗时太长,刚出中止又进去了.这时的现象是程序一直在中止中履行,回不到主函数。 (中止嵌套)
4.查看CPU的电源是不是安稳,msp430在要确保程序正常运转,需确保Vcc大于1.8V。当电压低至0.8V时,程序仍有或许履行。这时的现象是PC指针乱飞,有复位,死机,停在中止,时钟频率发生变化等现象。
5.程序编译没问题,下载程序后上电不断复位,该问题是因为WDT形成的(RAM的初始化时刻大于WDT默许的32MS时刻,因而MSP复位)底子原因是初始化的时刻过长,超过了看门狗的时刻,初始化完结今后才干进入main函数,这时关狗现已来不及了。
处理的方法:
A 对你的数组用 __no init_界说,上电编译器不发生特别的附加函数去初始化RAM.
B 在Project–Options–Linker–Config中挑选 Override default programe,并将Entry lib 设置成 __program_start这时要修正Cstartup.S43(记得把它参加复制到工程而不是修正体系的),在第一条指令前参加关狗的指令,在main函数里再开(假如需要的话)。
假如用汇编,则没有这个问题

http://topic.csdn.net/u/20100730/09/45f212a1-0354-4b73-ad62-335b5955c0f2.html

**************************************************************************************************

6、把无用的中止答应关掉。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/259030.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部