智能车制作

标题: 关于ucos for DG128移植后的稳定性 [打印本页]

作者: nickzmj    时间: 2010-11-20 14:09
标题: 关于ucos for DG128移植后的稳定性
各位,大家好!关于ucos for DG128移植后(包括中断服务的应用),一直想应用到实际当中,但是经常会碰到系统不稳定。所以一直不敢应用于实际。我现在的例子是:SCI0在中断中接收10byte的数据,接收后返回任务中再发送出去。

*****************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 20 SCI0_ISR(void){
   INT8U i;
   DisableInterrupts;               //关中断
   cnt0=TCNT;
OSIntEnter();
cnt1=TCNT;
err=SCI0ReN(10,sci0_buf);     //10个byte接收
if(err==1){
    for(i=0;i<10;i++){   
        sci0_buf[i]=4;        //错误处理
    }
}
else  OSSemPost(sci_sem);     //发送信号量

   cnt2=TCNT;
OSIntExit();   // exit interrupt and task switch
   EnableInterrupts;              //开中断
}

///////////////////////////////////////////////////////////////////////////////////////////////////

*********************************************************************/
void  TaskSCI(TASKDATA* pdata){

      int   tmp;
      pdata=pdata;
      
      
      SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enable
      SCI0BDH=0x00; //busclk 16MHz, 9600bps,SCI0BDL=0x68
      SCI0BDL=0x9c; //SCI0BDL=busclk/(16*SCI0BDL)   
      
      for(;;){
         OSSemPend(sci_sem,0,&err);       //等待信号量
         DisableInterrupts;               //关中断  
         cnt3=TCNT;
         SCISendN(10,sci0_buf);           //把接收到的发送出去
         EnableInterrupts;              //开中断
                                                   //**************************************************
         OSTimeDly(OS_TICKS_PER_SEC);   //问题就在这里! 如延时变短,
      }                                 // 如OSTimeDly(5); 收发数据多次就容易死机。
}                                               //**************************************************



按理论来说,修改这个OSTimeDly(); 函数时间的长短是不会有稳定性的影响的,但改成OSTimeDly(5); 就很容易死机,附件是我的项目文件 和串口调试软件(这个串口调试软件是不会导致死机的,因为在没用UCOS时是很好用的),请大家研究一下!
作者: fancymask    时间: 2011-11-1 14:42
回复 1# nickzmj


    请问 你最后 找出问题来了吗???




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2