S3C2440平台WinCE5.0中串口发送堵塞现象的疑惑

iwillbeback008 2010-03-28 10:28:45
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量级)!

请各位帮忙分析一下原因和提出改进方法!
谢谢各位CSDN的网友咯!

...全文
222 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwillbeback008 2010-04-02
  • 打赏
  • 举报
回复
现在使用TQ2440原生态的WinCE5.0 BSP包,问题解决了;
10个字节左右的数据从接收到直接转发出去,用时在2ms以内!

结贴!
大海雪山 2010-03-31
  • 打赏
  • 举报
回复
延迟100ms是winCE线程时间片的大小。
4ms的发送时间,数据量有多大?这么慢。
可以更改一下线程时间片,不过这点我感觉不怎么好。
你的串口程序线程之间关系可能不太合理,所以那么耗时间。
建议修改程序。

iwillbeback008 2010-03-30
  • 打赏
  • 举报
回复
TQ2440 5.0的BSP包是兼容SKY2440的
gukoule 2010-03-30
  • 打赏
  • 举报
回复
通过咨询TQ公司,TQ工程师回复:
1、从4.2升级到5.0的BSP包的串口驱动本身有bug,当数据量大了就会出现丢失数据的问题。
2、推荐使用TQ2440的BSP包,全面兼容SKY2440。
3、下面是链接: http://bbs.embedsky.net/viewthread.php?tid=554&extra=page%3D1
gukoule 2010-03-30
  • 打赏
  • 举报
回复
帮你顶下
iwillbeback008 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunrain_hjb 的回复:]
你可以用自动发送的功能进行测试,看看效果。
你的应用是收到后再回发同样内容?你可以模拟着自动发送一些数据。
[/Quote]

我就是想用“收到后再回发同样内容”,来测试小数据量时,串口的速度
sunrain_hjb 2010-03-29
  • 打赏
  • 举报
回复
你可以用自动发送的功能进行测试,看看效果。
你的应用是收到后再回发同样内容?你可以模拟着自动发送一些数据。
iwillbeback008 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunrain_hjb 的回复:]
用那个工具测试的效果怎样?问题还是存在么?

如果怀疑是BSP的问题,最好还是从BSP入手解决,否则是治标不治本,也许花的时间更多。
[/Quote]


你说的那个测试软件,我测试啥?
又没有自动接收数据后自动回发功能。

看来还是像7楼说的,先换个5.0的BSP试试...
LaiQingXiong 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iwillbeback008 的回复:]
引用 3 楼 sunrain_hjb 的回复:
http://download.csdn.net/source/870333
有点怀疑是应用程序的问题,
你下载这个串口调试工具测试一下,是否也有同样的问题。

三星应该有出5.0的bsp吧,你可以找一个跟你现在的对比看看。


这个工具我有。

也有可能是驱动的问题,但是现在再移植那个5.0的BSP要耗点时间...
[/Quote]

先弄好5.0 串口,其他不用管先,直接跑都可以的,呵呵。
iwillbeback008 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunrain_hjb 的回复:]
用那个工具测试的效果怎样?问题还是存在么?

如果怀疑是BSP的问题,最好还是从BSP入手解决,否则是治标不治本,也许花的时间更多。
[/Quote]

那个软件我今天试试,它不能完全模拟实际使用的情况.
iwillbeback008 2010-03-29
  • 打赏
  • 举报
回复
自己再顶上
wdhhawk_nnc 2010-03-28
  • 打赏
  • 举报
回复
可以检查一下串口发送时还有没有其他线程在工作,建议把其他的线程屏蔽掉,在一个相对纯净的条件下测试你的串口操作
sunrain_hjb 2010-03-28
  • 打赏
  • 举报
回复
用那个工具测试的效果怎样?问题还是存在么?

如果怀疑是BSP的问题,最好还是从BSP入手解决,否则是治标不治本,也许花的时间更多。
iwillbeback008 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sunrain_hjb 的回复:]
http://download.csdn.net/source/870333
有点怀疑是应用程序的问题,
你下载这个串口调试工具测试一下,是否也有同样的问题。

三星应该有出5.0的bsp吧,你可以找一个跟你现在的对比看看。
[/Quote]

这个工具我有。

也有可能是驱动的问题,但是现在再移植那个5.0的BSP要耗点时间...
sunrain_hjb 2010-03-28
  • 打赏
  • 举报
回复
http://download.csdn.net/source/870333
有点怀疑是应用程序的问题,
你下载这个串口调试工具测试一下,是否也有同样的问题。

三星应该有出5.0的bsp吧,你可以找一个跟你现在的对比看看。
iwillbeback008 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wdhhawk_nnc 的回复:]
可以检查一下串口发送时还有没有其他线程在工作,建议把其他的线程屏蔽掉,在一个相对纯净的条件下测试你的串口操作
[/Quote]

哦,屏蔽其他线程的思路不错,那如果操作呢?

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧