阅读:1168回复:7
关于PCI采集卡跟用户层通讯的问题
公司现在在做pci视频采集卡,一卡四路。
现在的步骤大致如下: 1)由卡上的dsp来进行视频采集和处理。dsp上为视频数据开辟了两个缓冲区,每个缓冲区可以存放1个frame的数据。dsp每采集1个frame的数据,就将其放在某一个缓冲区中,并且产生中断。 2)驱动程序处理中断,将dsp内存的某缓冲区的数据copy到系统内核的某个缓冲区中。在系统内核中为每路开辟了2个缓冲区来存放数据。 3)应用层通过向驱动发送Read命令来获得dsp产生的数据 其实我觉得很奇怪,为什么要用驱动来这样处理中断,为什么不直接由应用层来处理中断、到dsp内存去取数据呢? 一个同事说,是因为在windows这样的多线程多任务的系统中,如果直接以应用层去处理中断,可能会有不必要的延时。不过我不是很理解这种说法。 |
|
沙发#
发布于:2004-08-12 16:27
其实我想问问大家,觉得什么样的方式比较好。要考虑到对cpu的占用、考虑到延迟等等。
我觉得驱动比较简单一些好,只要能够找到卡能读卡上mem就差不多了。 |
|
板凳#
发布于:2004-08-12 16:46
用驱动的话,执行时间肯定是要比用户态少很多的。。。。。。
|
|
地板#
发布于:2004-08-12 17:01
可是,如果在驱动中处理,也是要把dsp内存上的数据写到系统内核中去,并且在应用程序中通过驱动去读内核的数据。
如果在应用层处理,那么是应用程序通过驱动去读dsp内存上的数据。 为什么第二种情况要慢很多呢? |
|
地下室#
发布于:2004-08-12 17:05
就像你同事说的那样,os是多任务的话,没有办法保证应用程序执行的时间的。在驱动中也可以直接锁定dsp内存的。
|
|
5楼#
发布于:2004-08-12 17:08
可能我笨啊,还是不明白
即使在驱动中处理了,也还是要在应用层中去通过驱动读内核数据啊,不还是无法保证执行时间吗? |
|
6楼#
发布于:2004-08-12 17:12
应用程序读---干扰(优先级、中断之类的)---无法读---丢帧。。。。。
|
|
7楼#
发布于:2004-08-12 17:15
其实驱动程序也分应用态和内核态的,当应用态处理不能满足诸如实时性等要求时,才考虑试用核心态。
|
|