阅读:3154回复:14
采样周期如何定义?
我现在在做一个ISA卡的驱动程序,其中要对卡进行16次采样,如何实现采样周期,以实现对采样的控制.请指点!
|
|
沙发#
发布于:2002-05-17 11:20
是每秒16次吗?可以用CustomTimerDpc
|
|
板凳#
发布于:2002-05-17 15:20
我现在在做一个ISA卡的驱动程序,其中要对卡进行16次采样,如何实现采样周期,以实现对采样的控制.请指点!
概念不清,说清楚点吧 |
|
地板#
发布于:2002-05-18 09:34
就是隔一个采样周期对端口采样,要循环采样16次!
|
|
地下室#
发布于:2002-05-18 12:05
呵呵,概念不清。
不知道你具体想问的是什么东西。 |
|
5楼#
发布于:2002-05-18 16:08
还是说的不清楚 :D
就是说,隔n秒(分钟?),采集一个数据,再过n秒,再采集一个数据。。。一共采集16个,数据就算采集完了? |
|
6楼#
发布于:2002-05-19 10:29
是在一个周期内对16通道(共有16个通道)完成一次读或写,再循环16次类似的操作. ;)
|
|
7楼#
发布于:2002-05-19 20:38
你的意思是这样的吧:
有一个信号的周期为t,现在需要在每个周期内等时间间隔的采样 16个点。 这里有两个问题需要搞清楚: 1。每个信号周期是否要进行相位同步; 2。你的采样周期是多长? 如果需要相位同步,你需要在硬件上有同步的机制。 采样周期如果较长的话,而且时间精度要求不高的话(毫秒级以上) 你完全可以不写驱动程序。 如果硬件有时间中断源的话,这个定时可以用你板子上的时钟。 或者你也可以使用系统提供的定时器中断 |
|
8楼#
发布于:2002-05-20 09:06
就是说,隔n秒(分钟?),采集16个数据,再过n秒,再采集16个数据。。。一共采集16次,数据就算采集完了?
|
|
9楼#
发布于:2002-05-20 11:11
非常感谢各位对我问题的支持.我的驱动程序的采样部分的确如大家想的那样:过n毫秒采集16个通道,再过n毫秒再采集一次...这个采样周期比较短,是在毫秒级(因为我可能不必采遍16个通道,可能采其中的几个有用的通道就可以了).卡上也没有时钟中断源.
我现在大概有两种可能的方法进行: 1.采样周期在驱动程序内部控制(数据当然是由应用程序发给驱动程序),采样循环在驱动程序内.在驱动程序中使用内核定时器.定义一个KDPC和KTIMER变量,分别用KeInitializeDpc和KeInitializeTimerEx初始化他们.再用KeSetTimerEx定义时间周期,这样内核定时器与DPC过程同步,DPC过程中具体实现采样.但不知道KTIMER的优先级如何?会不会轻易被其他的线程打断? 2.采样周期的控制在应用程序中,在用户态设置OnTimer函数(在VC++中)往驱动程序发读请求包,从而实现采样.不过,这样OnTimer函数也好像挺容易被其他用户态线程中断. 请各位大虾指点迷津!多谢了! |
|
10楼#
发布于:2002-05-20 12:13
CustomTimerDpc在Dispatch_level。
毫秒级应该没有问题才对,系统基本单位是100纳秒,0.1毫秒。 还有,你的采样周期要经常变动吗?为什么要在OnTimer向driver发送?发送一次不行吗?或者有更改的时候再发送一次不行吗? |
|
11楼#
发布于:2002-05-20 20:53
我说的用OnTimer控制采样周期表述有点问题,应该是控制采样循环.主要是想用应用程序的时间控制采样的循环,每个周期(共发16次)发给驱动程序的是一个读IRP进行采样.(你可能把我说的第一种方案混淆了,我说的第一种方案中采样的循环是在驱动程序中完成,应用程序提供一个周期给驱动程序就行).
采样周期可能要改变,但并不是在这16次循环采样中.也就是说总体完成了采样之后,可能需要调整周期. 对了,采集数据部分能不能放在自定义的DPC过程中?这样的话,是不是自己定义的中断服务函数和中断DPC就不能在其中采样了? |
|
12楼#
发布于:2002-05-21 09:43
那么你的第一方案当然好多了。
你不是要用timerdpc吗? 和中断有什么联系? |
|
13楼#
发布于:2002-05-21 11:01
我原来是打算把读写数据放到中断服务函数中去,但是不能实现周期性采样。现在,看来没有必要了!
另外,你说的CustomTimerDpc有这个函数吗?是不是需要自己定义一个DPC对象,和写一个DPC过程? |
|
14楼#
发布于:2002-05-21 16:54
CustomTimerDpc例程只是一个与内核计时器对象相关联的DPC例程。
自己定义一个KDPC和KTIMER。在KeSetTimer的时候将这个DPC也就是CustemTimerDpc“挂”上。 详细看DDK吧。 |
|