CE5.0下串口丢失字符现象

hgsss1105   2009-12-22 15:07 楼主
我用串口2自收发,串口先发送54个字符,然后在接收,并且会比较发送是否与接收的字符相同。用PING 命令不停地发送40960大小的包,打开5个以上的命令行,执行ping命令,同时从网上下载文件,或者renew一下重新获取IP地址(IP为动态分配)串口会出现丢失字符现象,丢失的字符在1-4个字符。我用GetLassError()获取错误号为2,是在发送中的。但是WriteFile发送返回的是54。试了119200、9600、115200和4800的波特率,都会存在不同程度的丢失,还请各位大侠指教。

回复评论 (8)

可能是以太网中断太多, 导致串口工作不正常...
1. 通过修改驱动减少中断响应时间.
2. 修改IST优先级及中断优先级.
3. 如果依然不能解决,就只有增加容错机制了.
点赞  2009-12-22 15:19
昨天看到一个wince5.0 串口BUG的帖子,不知道对你有没有帮助
http://bbs.driverdevelop.com/read.php?tid-109193.html
点赞  2009-12-22 15:21
谢谢了,但是我不知道在哪里修改IST优先级呀?
点赞  2009-12-22 16:10
在CreateThread创建IST线程后, 调用CeSetThreadPriority修改就可以了
类似:
hThd = CreateThread(..., MyISTRoutine, hEvent, ...)
CeSetThreadPriority(hThd, 152);
点赞  2009-12-22 16:12
引用: 引用 4 楼 flandy1982 的回复:
在CreateThread创建IST线程后, 调用CeSetThreadPriority修改就可以了
类似:
hThd = CreateThread(..., MyISTRoutine, hEvent, ...)
CeSetThreadPriority(hThd, 152);

可以设置优先级

按之前也遇到这样的项目,串口、网络
点赞  2009-12-22 19:08
谢谢了,我在PUBLIC\COMMON\OAK\DRIVERS\SERIAL\MMD_2\把mmd.c里,修改了SerialDispatchThread的优先级为105,目前还没有存在丢失现象。我想知道如何在驱动中中断响应时间?还望各位高手指教。
点赞  2009-12-23 09:54
引用: 引用 6 楼 zhdi1986 的回复:
谢谢了,我在PUBLIC\COMMON\OAK\DRIVERS\SERIAL\MMD_2\把mmd.c里,修改了SerialDispatchThread的优先级为105,目前还没有存在丢失现象。我想知道如何在驱动中中断响应时间?还望各位高手指教。


有些改了也不起作用的,我改过。
点赞  2009-12-23 12:46
是呀,我改了后来又重新用Build and Sysgen 编译了一下内核,还是会丢数据。网上用人说修改OAL\INC\hw16550.h文件,改变FIFO触发值,试了后时好时坏。现在不知道到底怎么办。
点赞  2009-12-25 09:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复