阅读:1319回复:10
如何实现驱动和内核对同一个内存空间的互斥访问?
我现在在arminit.c文件中的中断处理中对某个中断进行了计数,因为该中断比较频繁,计数的变量在arminit.c文件中进行累加;而我要在驱动程序中把该变量读取出来;意味着我要在驱动程序中和内核中对该变量的访问实现互斥;我该如何实现这种驱动和内核对同一个变量的互斥呢?
|
|
沙发#
发布于:2007-11-07 11:59
自己顶一个
|
|
板凳#
发布于:2007-11-07 12:42
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2007-11-07 14:02
CreateMutex
WaitForSingleObject ReleaseMutex 不知道是否可以 |
|
地下室#
发布于:2007-11-07 20:47
这个本来就是互斥的,你只要保证在中断处理中增加该变量,驱动程序中只读取,就没有问题。
因为系统在处理中断时一定无法执行驱动程序的代码,反之亦然。 |
|
|
5楼#
发布于:2007-11-08 10:41
microsun说的有道理。
我实际测试的情况是这样的,我再arminit.c文件中对某个中断计数,驱动程序中每秒钟读取一次该计数(没有修改,只是读取),这个中断如果每秒钟3k次以下,程序没有问题;如果中断次数达到每秒3k次以上,驱动程序中每秒钟读取的计数值就会变成0,并且过一会后系统会发生复位现象。 我百思不解啊。希望能指点一二。 |
|
6楼#
发布于:2007-11-09 17:00
自己再顶一个
|
|
7楼#
发布于:2007-11-11 21:20
你的CPU是多少M的,
可以测一下在你这个系统中IST的响应速度,会不会是系统太慢了? 还有测一下只处理你这个中断,别的基本什么都不干时是什么现象. |
|
|
8楼#
发布于:2007-11-13 14:11
cpu是266M,
就算是IST的响应速度慢,理论上也不应该出现这样的现象啊? |
|
9楼#
发布于:2007-11-14 18:46
你驱动怎么去读的,那个计数是否会清0,我想来是这样设计的,通过KernelIoControl去获取这个在内核中中断的计数。如果你不去读这个中断计数,是否系统不会复位?另外你不是说中断计数是0吗?怎么又得到实际中断数超过3K/S?
|
|
10楼#
发布于:2007-11-15 09:09
预先预留一个内存空间,在驱动程序中读取时先映射到驱动程序的进程空间。
如果我不读取,系统是不会复位的,工作非常正常。 我使用的波形发生器在测试,因此输入的频率我知道。 |
|