Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
阅读:3082回复:5

有别的方法替代KeStallExecutionProcessor吗?

楼主#
更多 发布于:2005-02-02 10:59
我在一个driver,我们的芯片硬件设计有点问题,一个command下去,不知道什么时候做完,所以总是要delay一小段时间,我用KeStallExecutionProcessor来delay小于50个microsecond,但是读写数据的时候,CPU占用率很高,90%啊,哥们,有没有好的方法替代KeStallExecutionProcessor的。
谢谢了。
I will do the best with what the God gave me.
acidfish
驱动小牛
驱动小牛
  • 注册日期2002-05-20
  • 最后登录2009-11-11
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-02 14:10
void
SysDelay(
ULONG Timeout
)
/*++

SysDelay:
performs a required delay. The usage of KeStallExecutionProcessor is
very nasty, but it happends only if SysDelay is called in the context of
our DPC routine (which is only called if a card change was detected).

For 'normal' IO we have Irql < DISPATCH_LEVEL, so if the reader is polled
while waiting for response we will not block the entire system

Arguments:
Timeout delay in milli seconds

Return Value:
void

--*/
{
LARGE_INTEGER SysTimeout;

if( KeGetCurrentIrql() >= DISPATCH_LEVEL )
{
ULONG Cnt = 20 * Timeout;

while( Cnt-- )
{
// KeStallExecutionProcessor: counted in us
KeStallExecutionProcessor( 50 );
}
}
else
{
SysTimeout.QuadPart = (LONGLONG)-10 * 1000 * Timeout;

// KeDelayExecutionThread: counted in 100 ns
KeDelayExecutionThread( KernelMode, FALSE, &SysTimeout );
}
return;
}
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-02-02 14:32
nop
nop
nop
nop

。。。
nop
你看看一个nop消耗多少时间,然后 算出需要几个nop
琢磨悟真知
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-02 16:03
nop
nop
nop
nop

。。。
nop
你看看一个nop消耗多少时间,然后 算出需要几个nop

这个方法可取,Linux中就是这样做的,用循环做NOP操作
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-02-02 17:48
楼上的和我想到一起了 :D
琢磨悟真知
binjuny
驱动牛犊
驱动牛犊
  • 注册日期2003-03-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望8点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-03 11:36
可以用空循环,
While()
{

}
游客

返回顶部