本帖最后由 Eve_dark 于 2012-6-2 09:22 编辑
我是做今年飞思卡尔智能车的,用的Kinetis10的主控芯片。但是现在程序有一个很奇怪的问题:会不定时跑飞。
就是程序开始运行后,在过一段时间之后,就会没有任何反应,在主循环中有加让LED灯闪烁的代码都没有反应。而且,每次跑飞的时间不确定,随机性很强,大概平均在1分钟以上。
请问各位大神这主是有哪些问题能引发随机性的程序跑飞呀??
整个程序结构采用简单的消息模式:
有两个主要中断,会在中断时发送消息,就是改变一个全局变量的值,主函数中死循环不断检测这个全局变量,如果有消息存在,就调用相应的处理函数,并清除这个消息。
大体如下:
int mainMsg=0;
void main()
{
初始化;
while(1)
{
switch(CheckMsg())
{
case 平衡控制:
调用响应控制函数;
break;
case 方向控制:
调用方向控制函数;
break;
case 串口消息:
调用串口消息函数;
break;
default:
break;
}
}
}
void timer() //定时器中断
{
if(达到5ms)
mainMsg|=平衡控制消息;
if(达到20ms)
mainMsg|=方向控制消息;
}
我试过,如果进行非法计算(试过比如1/0或sqrt(-1))不会造成芯片跑飞,而且把所有用到的sprintf函数都换成了snpritnf函数防止缓存区溢出。但还是不能解决问题。 |