7367|31

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求教,怎样提高串口响应速度? [复制链接]

本人在应用程序中弄了个串口类,创建了两个串口,使用线程接收串口数据,得到数据后发消息处理数据,然后再通过送串口输出处理数据。现在的问题是从串口送数据进去到串口发数据出来两者间隔时间不确定,有时很快,有时要大概1s。
我想问题可能出在:
1、串口接收线程优先级太低,被其他处理占用时间
2、消息队列等待时间消耗
不确定问题出在哪里,请各位大牛帮忙,想想问题可能出在什么地方,有没有什么好的解决办法。
如果提高线程优先级,又担心影响到触摸、键盘等操作。。。大伙帮帮忙。。。在这谢谢各位了。。。

最新回复

SetComTimeouts这个函数在我创建串口线程类的时候就设置了,总共有5个参数,前三个表示接收超时设置。根据书上说法,第一个表示两个接收字符间的最大时间间隔,第二个表示平局读一个字符的时间上限,第三个表示读数据总超时总量。第一个参数我设置最大,后两个设置为0,表示不管是否有数据读取,ReadFile立刻返回。我把前三项改成0,表示没有超时设置,没有效果。把三项都赋值,感觉也没有变化,读取数据会分段接收,这是造成接收慢的关键所在,但是怎么设置才能解决?楼上能给出三个参数的具体值吗?我试试效果  详情 回复 发表于 2009-11-30 15:35
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我从驱动的角度去提高,试过的确有效果。
请参照这篇我以前写的文章http://www.armce.com/bbs/viewthread.php?tid=413&highlight=%E4%B8%B2%E5%8F%A3
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢googleman,我去试试先。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
只能尽量提高中断线程优先级了。
还有就是处理完中断服务程序后尽快清理中断标志位和使能中断,不要去等待InterruptDone函数查询了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
还有就是我觉得接受数据可以用创建中断线程去接收,而发送数据时就没必要去用UART中断去发送数据了,创建一个UART polling mode的线程,当接受到数据后立即手动触发UART 发送的线程。
不知道你是怎么做的?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
你一次处理的数据量有多大。根据使用的波特率算算传输时间。1秒内如果数据量不是很大,可以考虑不是串口的问题,而是你的程序在哪里出了问题。用115200的传数据,基本上(传输距离很短时)10ms100个字节是没问题的。

 
 
 

回复

77

帖子

0

TA的资源

宇宙尘埃

7
 
把串口速度提上去
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 1 楼 gooogleman 的回复:
我从驱动的角度去提高,试过的确有效果。
请参照这篇我以前写的文章http://www.armce.com/bbs/viewthread.php?tid=413&highlight=%E4%B8%B2%E5%8F%A3


驱动试了,但是效果不大,应该是应用层耗时太多
应用层有什么好方法提高响应速度?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 3 楼 heyme 的回复:
只能尽量提高中断线程优先级了。
还有就是处理完中断服务程序后尽快清理中断标志位和使能中断,不要去等待InterruptDone函数查询了。

优先级要提高到什么程度呢?

我这里说明一下我的程序结构。
我用一个线程类处理消息,如串口收发,IC卡交互等(没有把这些处理分解成多个类)。这个类优先级设置成99(设置太高,怕影响到键盘、液晶屏等工作)。串口采用CreateFile创建,用线程监听接收串口数据,线程优先级默认,用WriteFile往串口写数据,串口收发正常,就是速度慢。
是处理消息的线程类优先级设置太低了?那设置多少合适呢?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 5 楼 cbema 的回复:
你一次处理的数据量有多大。根据使用的波特率算算传输时间。1秒内如果数据量不是很大,可以考虑不是串口的问题,而是你的程序在哪里出了问题。用115200的传数据,基本上(传输距离很短时)10ms100个字节是没问题的。



默认选择19200测试,当然115200也是可选的。数据量不大,不超过500个字节
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

11
 
19200 一秒1745字节是极限。放宽一点一次接收1500个字节没问题。但是如果数据发送和接收都得算上,不知道你的是怎么操作的?自己求一下传输字节需要多长时间,剩下的才是程序浪费的时间。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
先做个试验,尽量减轻你的串口无关的应用层程序,wince上只运行你的串口程序,再测试个100次(for循环的意思),看情况是否和你所说的一样。也要考虑你一次发送数据的量和你的波特率,进行相关时间的计算。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 wohuazhen 的回复:
先做个试验,尽量减轻你的串口无关的应用层程序,wince上只运行你的串口程序,再测试个100次(for循环的意思),看情况是否和你所说的一样。也要考虑你一次发送数据的量和你的波特率,进行相关时间的计算。


我使用GetSystemTick在串口接收线程收到数据时,获取一次,在发送数据前获取一次,发现两者差值只有最多4个tick,是否说明主要是串口接收没有优化好呢?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
初步判定应该是串口接收太慢造成的,因为我从应用程序界面模拟串口数据发消息,能快速从串口外接设备收到响应数据。
但是从外接设备送数据等待回复就不稳定,经常要大约1s时间。
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
大伙还有没有别的思路啊,帮帮忙啊,急!!!!!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 1 楼 gooogleman 的回复:
我从驱动的角度去提高,试过的确有效果。
请参照这篇我以前写的文章http://www.armce.com/bbs/viewthread.php?tid=413&highlight=%E4%B8%B2%E5%8F%A3

看了这篇文章,很有用,感谢lz分享
后续发现哪些驱动需要优化的时候,也尝试一下这种方法
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 
晕,不是感谢我,是gooogleman的文章,感谢他的分享
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 
是否查询方式,如果是的话要看一下查询时间是否比较长造成响应慢.
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 tcdzyq 的回复:
是否查询方式,如果是的话要看一下查询时间是否比较长造成响应慢.


目前应用层使用的接收线程用的是while(true),一直查询方式,tcdzyq说的是这个吗?
我也在考虑是否是这种接收方式响应太慢,有没有更好的接收方法。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

20
 
我也同样的问题,我是尽量减少线程数 ,提高线程优先级做的
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表