MSP430程序跑飞之解决方法

[复制链接]
2196|9
 楼主| beiwaroad 发表于 2012-12-25 21:31 | 显示全部楼层 |阅读模式
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函数里再开(如果需要的话)。
请大声尖叫 发表于 2012-12-25 22:05 | 显示全部楼层
关于加大堆栈空间,个人觉得不能根本上解决堆栈溢出。430的堆栈是由下到上的,变量是由上到下的。堆栈空间即使设置10个字节,只要先上的堆栈和变量打架,没关系的。
angerbird 发表于 2012-12-26 10:19 | 显示全部楼层
防止程序跑飞:1.优化你的代码结构,程序中的局部变量尽量少用;2.加上看门狗功能
思明 发表于 2012-12-26 23:43 | 显示全部楼层
防止程序跑飞学了不错受益匪浅
smilingangel 发表于 2012-12-27 09:44 | 显示全部楼层
3楼的意见简明扼要,可以一试的啊
xuan309170083 发表于 2013-11-10 16:15 | 显示全部楼层
这些应该是对于51,AVR那些单片机防止跑飞的比较通用的办法吧
comeon201208 发表于 2013-11-10 19:16 | 显示全部楼层
中断耗时太长,刚出中断又进去了.这时的现象是程序一直在中断中执行,回不到主函数,
这个问题的确实需要注意的
comeon201208 发表于 2013-11-10 19:17 | 显示全部楼层
一般的中断函数都不要求有非常复杂的算法的,力求简洁
dota_yy 发表于 2014-1-13 13:18 | 显示全部楼层
学习下
即墨 发表于 2014-3-4 14:50 | 显示全部楼层
楼主,请问遇到低5中情况在CCS V4中怎么解决,直接在程序中用 __no init_定义,程序会编译产生错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

964

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部