WinCE中微秒us级的延时函数
--作者:赖玉平(auly)aulyp@163.com
在WINCE 5.0中,做驱动开发,特别是通信协议驱动时,延时动作是非常有必要的,如果想要做延时,像单片机一样用空操作来做的话,是不行的,由于时间片的原因,最多只能达到1US的延时量,如果要实现微秒级的延时,得用到系统API.
下面是一个经过我验证的函数,在做通信协议时,非常有用。
void Delay_us(int n)
{
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus,dfFreq,dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);
QPart1 = litmp.QuadPart;
do
{
QueryPerformanceCounter(&litmp);
QPart2 = litmp.QuadPart;
dfMinus = (double)(QPart2-QPart1);
dfTim = dfMinus/dfFreq;
}while(dfTim<0.000001*n);
}
误差:Delay_us(23) =====实际:25us
Delay_us(100) ====实际:107us