微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > msp430程序跑飞原因和解决方式积累

msp430程序跑飞原因和解决方式积累

时间:11-25 来源:互联网 点击:
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、把无用的中断允许关掉。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top