单片机程序跑飞的三种现象、原因及解决方法
今天在编写单片机程序的时候,由于中断服务程序写
的不好,导致单片机程序总是跑飞,最后费了好长时间,
花了很大功夫才找到问题原因,由此总结了单片机程序跑
飞的三种现象、原因及解决方法。
一、数组越界(数组溢
出)现象:单片机程序在函数中运行时,总是在运行到函
数末尾,要跳出函数时,程序跑飞。原因:数组越界(数
组溢出)
,函数中定义的数组元素的个数小于程序中实际使
用的数组元素的个数,例如在函数中定义了一个数组
ucDataBuff[10]
,这个数组只有
10
个元素,但是在函数中却
有这样的语句
ucDataBuff[10]=0x1a,
这个语句是给数组的第
11
个元素赋值,
:由于定义的数组只有
10
个元素,从而导
致赋值语句中不知道把
0x1a
放到什么地方,从而导致程序
跑飞。解决方法:如果在调试程序时,发现程序总是在函
数执行完毕时跑飞,多数情况是发生了数组越界(数组溢
出)的错误,仔细检查函数中调用的数组是否存在越界
(溢出)的情况。
二、中断服务程序缺失现象:程序运行
过程中总是跑飞。原因:程序中打开了某个中断,但是却
没有相应的中断服务程序,从而导致在中断发生后,找不
到中断服务程序入口,从而导致程序跑飞。解决方法:检
查程序中是否存在打开了某个中断,但是没有相对应的中