标题:
探讨一下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