Board logo

标题: 探讨一下UCOS移植到XDG128上后程序运行的稳定性问题 [打印本页]

作者: nickzmj    时间: 2010-11-6 13:49     标题: 探讨一下UCOS移植到XDG128上后程序运行的稳定性问题

各位大家好,今天探讨一下UCOS移植到XDG128上后程序运行的稳定性问题。我的程序大概内容是:在XGATE中开通了SCI0接收中断和一个软件中断用来发送数据,XGATE中的SCI0接收完数据后用 SIF 通知CPU12的SCI0中断,     在CPU12的SCI0中断中让某一位置1 ,用来使,一个任务中开启XGATE的软件中断0再发送数据(XGSWT= 0x0101;)                                 
程序如下:
//////////////////   in xgate  ///////////////////////////
interrupt void SoftwareTrigger0_Handler(MyDataType* __restrict pData) {
    unsigned char err,i;
     asm LOOP1:
    asm SSEM #0 // try to lock semaphore 0
    asm SSEM #0 // try to lock semaphore 0     // once more due to internal silicon bug
    asm BCC LOOP1 // retry if locked
   
    SCISendN(20,sci0_buf);                            //发送数据
    asm CSEM #0 // release semaphore
    XGSWT= 0x0100;
}

interrupt void Xgate_SCI0_handler(void){
   unsigned char err,i;
     err=SCI0ReN(20,sci0_buf);                     //接收数据
if(err==1){
    for(i=0;i<20;i++){
       sci0_buf[i]='x';  
    }
}
  asm SIF;
  }
/////////////////      in  ISR      ////////////////////////////
void interrupt 20 SCI0_ISR(void){
   DisableInterrupts;               //关中断
   //cnt0=TCNT;
   PORTB_PB2=0;
OSIntEnter();
   // cnt1=TCNT;
     
   XGIF1_XGIF_6B =1;
  // OSSemPost(sci_sem);
     bit0=1;
   // cnt2=TCNT;
OSIntExit();   // exit interrupt and task switch
   EnableInterrupts;              //开中断
}
////////////////   在任务中 ////////////////////
void  TaskSCI(void* pdata){
      pdata=pdata;
      
      for(;;){
         //OSSemPend(sci_sem,0,&err);
         if(bit0==1){
            bit0=0;
            XGSWT= 0x0101;       //开中断
            PORTB_PB2=1;
         }
         OSTimeDly(20);    ///////////// /////////       问题就在这里
      }
}
问题就是OSTimeDly(20);(OSTimeDly(122);为1秒)  如果写成OSTimeDly(61);整个程序运行都正常,从发送数据再返回数据,无论我连续发20个,20个,20个数据多少次,频率多高。也不会死机。 但改成OSTimeDly(10);发三次就死机了。
请问各位这是不稳定还是其他什么原因?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0