读书人

wince6.0 可不可以实现微秒级的定时器

发布时间: 2013-06-25 23:45:41 作者: rapoo

wince6.0 能否实现微秒级的定时器
最近在做一个应用程序时,需要利用IO引脚提供一个2KHZ的频率,通常使用的定时器不能满足需求,查阅了不少资料都没有看到合适的解决方法,不知道各位大牛有没有什么好的解决方法??
[解决办法]
mark
[解决办法]
应用级,很难实现
[解决办法]
参考下//WINCE 微秒级延时函数

void delay_us(int n)
{

LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfMinus, dfFreq, dfTim;

if(QueryPerformanceFrequency(&litmp)==FALSE)
{
MessageBox(NULL,TEXT("Error:QueryPerformanceFrequency"),TEXT("Error"),MB_OK);
return;

}

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);

}

//WINCE毫秒级延时函数

void delay_ms(DWORD tmp_time)
{
DWORD start;
DWORD time_i=0;
start=GetTickCount();

while(time_i<=tmp_time)
{
time_i=GetTickCount()-start;
}

}

[解决办法]
完全可以。用PWM定时器。
不过要在ISR中来做。
[解决办法]

引用:
个人觉得,微秒级的定时循环写成这样好点:
do
{
QueryPerformanceCounter(&litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;

}while(dfTim < n);

建议用硬件定时中断来实现

读书人网 >WinCE

热点推荐