当前位置: 代码迷 >> WinCE >> wince6.0 可否实现微秒级的定时器
  详细解决方案

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

热度:50   发布时间:2016-04-28 12:54:46.0
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(&amp;litmp);
QPart2=litmp.QuadPart;
dfMinus=(double)(QPart2-QPart1);
dfTim=dfMinus;

}while(dfTim < n);
  相关解决方案