关于函数CH341SetBufUpload()

沁恒技术专家:

您好! 我请教几个问题:

问题1: (1)CH341SetBufUpload()调用后,ch341怎样使用缓存区,缓存区是否为循环队列,缓存区满了会出现什么现象? (2)CH341ReadData()读取后,再次读取的位置在缓冲区中是从头开始还是接着上次的位置? (3)CH341ReadData()读取缓存区时,如刚好有数据上传是否会丢失?

问题2: 我用单片机向微机传送数据(每隔40ms传送16字节,共传送1024次),微机端程序通过周期性调用CH341ReadData()读取数据,发生数据丢失现象,只能收到1023个数据包,不知什么地方弄错了?(不好意思可能没说清楚,请帮大概分析一下)

问题1: 1.你设置了缓冲上传模式,缓冲区内开了几十K字节的缓冲.如果缓冲满了,那么最先接受到的数据会被覆盖. 2.读数据会按照先后顺序读. 3.如果缓冲区没满,ch341readdata操作(应用层操作)与上传(内核线程在读)不会冲突. 问题2: 如果您每隔40ms传送16字节,共传送1024次,我建议您开一个线程, 1.用函数: CH341QueryBufUpload( // 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数 去查询内核缓冲区内包的个数,如果发现有包就去取数据. 2.如果你确认你每次设备上传数据是16字节,那我建议您每次CH341ReadData()读数据的长度为16的倍数据. 因为我们驱动里保存上传的数据以USB包为单位存放,但取数据又以包内的实际长度为准,所以每次取数据长度值最好以你上传的长度,或长度的倍数.


谢谢指导。


只有登录才能回复,可以选择微信账号登录