虚拟的世界,请注意你的门限值

第一次看到虚拟这个字样,应该是在物理地址与虚拟地址的pk中吧,现在各种各种的虚拟机也是层出不穷,大名鼎鼎的vmwarevirtualpc等。在wince中也有emulator。真是一个虚拟的世界,不知道以后还会出现个啥。

 

在这里所要说的虚拟的东西,还是比较具体的,是wince驱动领域的。现在随着外围器件,模组功能的多样话,随之而来的产生了很多问题。例如一个外围的模组(这里特指由第三方封装了的某功能芯片)提供两种不同的功能,而其与cpu/mcu的通信通道只有一个,如下图所示:

通信的通道这里当然也有很多种:uartusbi 2c i2sspi等等。这里以uart为例,也就是说cxmcu之间是通过uart来进行通信的,而在mcu上是要跑操作系统的,这里就是wince。驱动的层面很简单,功能很单一,只完成该完成的时,做多了反而不好,这里的串口驱动也是一样。那现在要针对cx这个模组来写驱动该如何做呢,只有一个通道,要实现两种功能。

 

从层与层的关系上来看,这个cx的驱动更象是在串口驱动上做的应用,这不过是两种功能FAFB的应用都是串口DC上做的。有了这一层面的认识,下面的问题似乎明朗了很多。物理的不行,那就来虚拟的吧。

 

再看一张图:

解释下,VUART1VUART2的数据接收和发送都是通过PUART,他们的应用是通过对PUART的应用,也就是用CreateFile以打开PUART的形式实现。当然这里面的消息格式有开发者来规定,可以加包头和包尾以做区分。这就是传言中的虚拟串口的做法吧。

 

原理的东西,就做以上的简单介绍。下面说下遇到的一些问题。就以一个特例说明。从上图中,可以知道,如果APPPUART通道来只实现CX的某一个功能,这是完全可以的。问题来了,同样的APP代码在用PUARTCOM1)时FAFB功能都是可以的,但是在用VUART1COM2)和VUART2COM3)的时候FA功能完全没有问题,但是FB就不行了。比较奇怪的问题。如果要是FAFB都不可用的话,那也可以死心了,但是现在这情况真实奇了怪了。

 

经过一段时间的折腾也搞明白是啥原因,想想,这些数据最后都是要走道PUART的驱动,通过在这里和VUART驱动里打印消息来看,开始发的几个小包有正常的接收,但到了一个大包(200B)发过去之后就没有数据上来了,PUART中的消息显示的是连续发了380字节的包。

 

好了,问题可以定位了,直接用PUART是没有这个包大小的限制的,而在VUART中有个包的大小限制,大了的要拆包,当然,这个操作在这里是有必要的。可问题就是有些包是不能拆的,拆了之后CX是组合不起来的。解决办法就是要调整包大小的门限。

 

你可能感兴趣的:(职场,休闲,门限,虚拟)