在线时间4 小时
UID147898
注册时间2009-8-30
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 322
- 最后登录
- 1970-1-1
|
原来的帖子丢了。再新开一个相同的帖子请教吧
我用MQX自带的中断串口驱动(itta)和函数实现一个Modbus数据接收过程:当监视到第一个字节出现后循环接收,如果等待3.5毫秒再等不来下一个数据,就认为已接受到完整的一桢数据。
while(fstatus(Handle_Serial_A)==0)// 等第一个字节
{
RTCS_time_delay(5);
Timeout_Count++;
if(Timeout_Count>200)//等1秒则设超时
{
Flag_Timeout=1;
break;
}
}
if(Flag_Timeout==0)//无超时
{
_task_stop_preemption();//禁止任务抢占
_time_get(&time);
End_Time=time.SECONDS*1000 + time.MILLISECONDS;;
Start_Time=End_Time;
while((End_Time-Start_Time)MB_Gap_Count_Max) MB_Gap_Count_Max=(End_Time-Start_Time);
Received_Count=_io_read(Handle_Serial_A, &Read_Buffer[Received_Total], MAX_PDU_LENGTH-Received_Total);
Received_Total += Received_Count;
Start_Time=End_Time;
}
_time_get(&time);
End_Time=time.SECONDS*1000 + time.MILLISECONDS;
if(Received_Total>=MAX_PDU_LENGTH) break;
}
_task_start_preemption();//允许任务抢占
。。。。。。
}
现在发现如果等待时间设小了(现在是15毫秒),程序就过早判断数据接收完成而丢失数据。如果系统同时再运行其他任务15毫秒还丢数据。
不理解是MQX的中断式串口低层驱动丢数据还是_task_stop_preemption()不好使,照理禁止别的任务抢占接收程序就不应被打断。
而MQX的中断时间是默认的5毫秒,如果因此处理不了3.5毫秒的事件可以理解,但3x5毫秒还丢数据就奇怪了。
大家帮忙分析一下。谢谢
|
|