|
S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑
[复制链接]
S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑:
本人开发一个软件,使用TQ公司的SKY2440开发板为模板,使用的是从4.2移植到wince5.0使用的BSP包。
该软件需要用到2个串口(COM0和COM1),TCP/UDP编程;修改MDD层的mdd.c文件使串口接收缓冲区为1MB,同时在BSP的注册表中使2个串口的线程优先级都提高到97(wince5.0中驱动的最高级别,之前设置为0也可以正常使用,但有时出现串口发送堵塞的现象),应用程序的串口超时为:
- //设置串口读写时间
- COMMTIMEOUTS CommTimeOuts;
- GetCommTimeouts (m_hComm, &CommTimeOuts);
- //读线程1ms超时
- CommTimeOuts.ReadIntervalTimeout = 1; //字间距间隔1ms
- CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
- CommTimeOuts.ReadTotalTimeoutConstant = 0;
- //写超时=0+(1*要写的字节数)
- CommTimeOuts.WriteTotalTimeoutMultiplier = 1; //10;
- CommTimeOuts.WriteTotalTimeoutConstant = 0; //1000;
复制代码
同时应用程序的串口读线程设置为普通应用程序最高级别的248级“THREAD_PRIORITY_TIME_CRITICAL”(之前设置为0也能正常使用,但有时出现串口发送堵塞的现象)。
两个串口的波特率均为115200,8个数据位,1个停止位和0个校验位。
应用程序的串口的读写操作使用的是读操作为线程,写操作为函数的方式模拟异步运行方式!
经过测试,经过以上设置,串口执行短数据的接收后立即把收到的数据通过同个串口发送回上位机,最快速度为4ms,请问这个速度正常不?
这种上位机向2440发送完数据后,等待一定时间(该时间内2440已把数据回发给上位机)后,再继续自动发送数据的模式下,2440的最快转发速度均在4ms。
但是实际应用中,如果是在串口有可能同时接收和发送的情况下,串口发送会堵塞一段很长时间(有时可以达到1000ms量级)!
请各位帮忙分析一下原因和提出改进方法!
谢谢各位eeworld的网友咯!
|
|