阅读:916回复:1
怎么改善isa板卡驱动的效率?
我用的ISA总线数据采集卡为12位16路带硬件锁相环(PLL)的同步数据采集卡,采用4片AD公司的四通道12位同步数据采集芯片AD7874,全部四通道的采样频率为29kHz,占用两个中断号,用跳线设置为IRQ10和IRQ11,占用的I/O端口地址为0x280至0x29f。
驱动程序开发用的WinDriver5.04,已经可以使用了,但是就是效率存在很大的问题:仅仅打开板卡和启动采集就占去了60%的CPU!这还不包括读数(其实加上读数也差不多),所以怀疑是不是中断服务程序编制的问题。原来我在11号中断服务程序中加了数据的转换程序,后来把这个删去了,占用资源居然上去了,占到了95%以上!!! 我把WinDriver生成的代码封装成了一个dll,其主要部分包括: ①打开WinDriver设备(即ISA总线数据采集卡) ②对数据采集卡上芯片及中断初始化 ③改写中断线程函数,加入端口操作 借助数据采集卡上的硬件电路,使数据采集卡在每两个工频周波所(由于硬件设计的原因,也可以设计为每个工频周波产生一次中断)产生一次IRQ10中断,两次中断的间隔由数据采集卡上的8254计数测得时间间隔,即可得到工频频率。要求对采集信号进行FFT分析,在每个周波内等间隔(锁相环实现)采样32点,产生32次IRQ11中断信号。改写了的两个中断线程功能为:IRQ10中断线程的功能为,清中断标志位,读8254计数器的值,清8254计数器,中断返回;IRQ11中断线程的功能为,将所有AD通道的采样值读入。 ④关闭WinDriver设备 我想实现的是6路信号的采集,每一路的采样率为1600S/s,通过中断方式来采集应该不会占用太多CPU资源啊?我的机子是P3 667,392M,Win2K+sp1。 请各位大虾牛人出手相助,共同探讨,江湖救急啊~~~ |
|
|
沙发#
发布于:2004-01-05 11:02
觉得太奇怪了!昨晚通过做实验确定了是dll的问题,现在觉得这个推论也不见得正确。
理由是: 昨晚用最小系统的vi测试dll时,发觉即使vi不数取数据,也有60%,所以怀疑到dll的效率问题。同时,这个结论也受到vc程序的支持。因为vc的程序读数显示也占到了60%。 但是今天进一步实验的时候发觉,把中断服务程序里的数据转换部分去掉以后,同样的测试vi,竟然到95%了。然后做更极端的实验,把中断服务程序变成一个空程序,就是没有任何内容,vi调用占到了60%;但,用vc程序调用一个此类的dll时,几乎不占用CPU。 |
|
|