430程序跑飞解决方法

2019-07-23 13:56发布

1.中断或主函数中有死循环,现象是程序停在某处。
2.堆栈溢出。现象是程序跑飞。
解决办法:
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函数里再开(如果需要的话)。
其实最实用的方法:1.优化你的代码结构,程序中的局部变量尽量少用;2.加上看门狗功能
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
vivilzb1985
1楼-- · 2019-07-23 15:23
楼上说的设置堆栈大小的是一种解决办法的。
shenmu2012
2楼-- · 2019-07-23 19:01
程序跑飞的话还一个办法就是启用看门狗功能的。
tongbu2015
3楼-- · 2019-07-23 20:20
那就 将看门狗的时间设置长一点的,或者 直接在初始化部分多次对看门狗进行喂狗操作的
angerbird
4楼-- · 2019-07-24 00:01
这个电源的稳定性也是非常重要的。
amaomails
5楼-- · 2019-07-24 00:52
 精彩回答 2  元偷偷看……
youtome
6楼-- · 2019-07-24 03:03
跑飞就使用看门狗

一周热门 更多>