WinCE下UART设置缓冲区的一个小问题

来源:互联网 发布:海康威视的设备域名 编辑:程序博客网 时间:2024/06/06 04:56

最近调试一个串口设备,使用模块厂家提供的API老是无法实现通信,整来整去就是不行,使用串口工具可以正常的从该串口进行数据通信,但是就是无法跟模块相连通信,厂家一再保证API是ok的,因为他们自己也有相关的应用,而模块在其他场合试过也是好的,这就奇怪了。

仔细查看了API的源码,终于发现问题所在,其打开串口后,就会进行参数配置,每完成一个配置就会查询操作是否成功,一旦发现操作失败,就会停止并退出,而在进行串口缓冲区设置的时候,会失败,于是乎,怎么都打不开串口进行通信。

程序使用SetupComm进行串口的缓冲区设置,但是操作的时候,返回FALSE,ErrorCode是50,代表不支持,上网查了下资料,发现WinCE下是不支持这个的,可是为什么厂家说之前在自己的wince平台下可以呢?原来虽然WinCE不支持这个功能,但是在WinCE5和WinCE6中对该操作的返回是不一样的。

SetupComm会发送IOCTL_SERIAL_SET_QUEUE_SIZE给MDD驱动的IOCONTROL,在WinCE5中,MDD驱动接收这条指令后,不会执行任何操作,返回TRUE,而在WinCE6中,虽然也不执行任何操作,但是会返回FALSE……这个是在微软的PUBLIC代码中,于是乎,之前查了BSP半天都不知道问题出在哪里。

找到问题所在,就好解决了,解决方法有两个:

1、在PUBLIC中进行修改,直接修改mdd层的文件,重新编译完成;

2、将该mdd层文件拷贝到bsp中,修改,然后将bsp的pdd层驱动的source文件修改一下,使其调用的库为bsp内的mdd层lib,这样就不会影响public中的代码。

原创粉丝点击