david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3154回复:14

采样周期如何定义?

楼主#
更多 发布于:2002-05-17 10:59
我现在在做一个ISA卡的驱动程序,其中要对卡进行16次采样,如何实现采样周期,以实现对采样的控制.请指点!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-17 11:20
是每秒16次吗?可以用CustomTimerDpc
yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-17 15:20
我现在在做一个ISA卡的驱动程序,其中要对卡进行16次采样,如何实现采样周期,以实现对采样的控制.请指点!

概念不清,说清楚点吧
david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-18 09:34
就是隔一个采样周期对端口采样,要循环采样16次!
noft
驱动牛犊
驱动牛犊
  • 注册日期2002-05-11
  • 最后登录2002-12-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-18 12:05
呵呵,概念不清。
不知道你具体想问的是什么东西。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-05-18 16:08
还是说的不清楚 :D
就是说,隔n秒(分钟?),采集一个数据,再过n秒,再采集一个数据。。。一共采集16个,数据就算采集完了?
david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-05-19 10:29
是在一个周期内对16通道(共有16个通道)完成一次读或写,再循环16次类似的操作. ;)
noft
驱动牛犊
驱动牛犊
  • 注册日期2002-05-11
  • 最后登录2002-12-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-19 20:38
你的意思是这样的吧:
有一个信号的周期为t,现在需要在每个周期内等时间间隔的采样
16个点。

这里有两个问题需要搞清楚:
1。每个信号周期是否要进行相位同步;
2。你的采样周期是多长?

如果需要相位同步,你需要在硬件上有同步的机制。
采样周期如果较长的话,而且时间精度要求不高的话(毫秒级以上)
你完全可以不写驱动程序。

如果硬件有时间中断源的话,这个定时可以用你板子上的时钟。
或者你也可以使用系统提供的定时器中断
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-05-20 09:06
就是说,隔n秒(分钟?),采集16个数据,再过n秒,再采集16个数据。。。一共采集16次,数据就算采集完了?
david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-05-20 11:11
非常感谢各位对我问题的支持.我的驱动程序的采样部分的确如大家想的那样:过n毫秒采集16个通道,再过n毫秒再采集一次...这个采样周期比较短,是在毫秒级(因为我可能不必采遍16个通道,可能采其中的几个有用的通道就可以了).卡上也没有时钟中断源.

我现在大概有两种可能的方法进行:
1.采样周期在驱动程序内部控制(数据当然是由应用程序发给驱动程序),采样循环在驱动程序内.在驱动程序中使用内核定时器.定义一个KDPC和KTIMER变量,分别用KeInitializeDpc和KeInitializeTimerEx初始化他们.再用KeSetTimerEx定义时间周期,这样内核定时器与DPC过程同步,DPC过程中具体实现采样.但不知道KTIMER的优先级如何?会不会轻易被其他的线程打断?

2.采样周期的控制在应用程序中,在用户态设置OnTimer函数(在VC++中)往驱动程序发读请求包,从而实现采样.不过,这样OnTimer函数也好像挺容易被其他用户态线程中断.

请各位大虾指点迷津!多谢了!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-05-20 12:13
CustomTimerDpc在Dispatch_level。
毫秒级应该没有问题才对,系统基本单位是100纳秒,0.1毫秒。
还有,你的采样周期要经常变动吗?为什么要在OnTimer向driver发送?发送一次不行吗?或者有更改的时候再发送一次不行吗?
david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-05-20 20:53
我说的用OnTimer控制采样周期表述有点问题,应该是控制采样循环.主要是想用应用程序的时间控制采样的循环,每个周期(共发16次)发给驱动程序的是一个读IRP进行采样.(你可能把我说的第一种方案混淆了,我说的第一种方案中采样的循环是在驱动程序中完成,应用程序提供一个周期给驱动程序就行).

采样周期可能要改变,但并不是在这16次循环采样中.也就是说总体完成了采样之后,可能需要调整周期.

对了,采集数据部分能不能放在自定义的DPC过程中?这样的话,是不是自己定义的中断服务函数和中断DPC就不能在其中采样了?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2002-05-21 09:43
那么你的第一方案当然好多了。
你不是要用timerdpc吗?
和中断有什么联系?
david_hehe
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-05-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-05-21 11:01
我原来是打算把读写数据放到中断服务函数中去,但是不能实现周期性采样。现在,看来没有必要了!

另外,你说的CustomTimerDpc有这个函数吗?是不是需要自己定义一个DPC对象,和写一个DPC过程?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-05-21 16:54
CustomTimerDpc例程只是一个与内核计时器对象相关联的DPC例程。
自己定义一个KDPC和KTIMER。在KeSetTimer的时候将这个DPC也就是CustemTimerDpc“挂”上。
详细看DDK吧。
游客

返回顶部