中级会员
- 积分
- 473
- 威望
- 273
- 贡献
- 174
- 兑换币
- 52
- 注册时间
- 2010-7-15
- 在线时间
- 13 小时
|
各位,大家好!关于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时是很好用的),请大家研究一下! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|