最近碰到个怪问题..在UCOS中.我的一个电机控制任务.如果用定时器来产生 输出脉冲.运行10多分钟就会产生 data abort interrupt.. 如果用OSTimeDly(1);延时产生,,就不会,,定时器 时发一个消息.. 电机控制任务是等待消息,,..怪,, 下面是部分程序:<br />void MotorCtrolTask(void *pdata)<br />{ //INT8U Error;<br /> INT8U i=0;<br /> pdata = pdata; <br /> MotorInit();<br /> while(1)<br /> { <br /> //OSSemPend(MotorRunSem,0,&Error); /*µÈ´ýmotor out enable ÐźÅÁ¿ */<br /> OSTimeDly(1);<br /> if(MotorStatus == STOP)<br /> {<br /> MotorStatus = INCREASE;<br /> } <br /> else<br /> { MOTORCLK_1; <br /> for(i=0;i<30;i++);<br /> switch(MotorStatus)<br /> { case INCREASE: MotorIncreaseRate++;<br /> if(MotorIncreaseRate>MOTORRATE)<br /> { MotorIncreaseRate = 0;<br /> MotorStartStep++;<br /> if(MotorStartStep>=STARTSTEP)<br /> { MotorStatus = RUN;<br /> MotorStartStep = STARTSTEP; <br /> }<br /> MotorStartStopControl(MotorStartStep);<br /> }<br /> break;<br /> case DECREASE: MotorIncreaseRate++;<br /> if(MotorIncreaseRate>MOTORRATE)<br /> { MotorIncreaseRate = 0;<br /> if(MotorStartStep>0)<br /> { MotorStartStep--;<br /> MotorStartStopControl(MotorStartStep);<br /> }<br /> else<br /> { MotorStatus = STOP;<br /> MOTORRESET_0;<br /> MOTORRESET_1;<br /> MOTORCLK_0;<br /> }<br /> }<br /> break;<br /> default: break;<br /> }<br /> OSTimeDly(1);<br /> MOTORCLK_0;<br /> }<br /> }<br />} <br />//---------------------------------------------------------------<br /><br />void Timer1_Exception(void)<br />{ T1IR = 0x01;<br /> VICVectAddr = 0; //interrupt close ֪ͨÖжϿØÖÆÆ÷ÖжϽáÊø<br /> OSSemPost(MotorRunSem);<br />} |
|