积极答复者
如何在EVC中编写延时程序,希望是微秒的

问题
答案
全部回复
-
叶帆 写: 对wince准实时系统来说,微秒级的延时,我觉得有点不现实,实际执行中由于操作系统的关系,我认为其延时一定是毫秒级的(CPU时间片的分配也是这个级别上的)。对底层不是很熟,仅代表我个人意见。
对
对OEM来说,他们必须考虑更高(相比毫秒)精度的定时器是否真的有必要,尤其是在CPU的时间片为几十微妙到数百微妙级的时候。如果你有必要在应用层来解决微妙级精度的延时,基本不用考虑有通用的解决方案了。。
要检查可应用的机器的时间刻度到底达到什么程度请使用:QueryPerformanceCounter和 QueryPerformanceFrequency
(相信在大多数设备中会返回1000(hz),即精度为毫秒)
Regards,
Freesc -
谢谢大家的解答。万分感谢。
后来我用以下程序:
void Delay_n_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);}
通过
for(i=0;i<60;i++)
{
for(j=0;j<1000;j++)
Delay_n_us(1000);
}
测试,大概可以得到1S的延时。
其实,以上的延时我是用于我自己做的一个驱动。
我现在做的流驱动是这样子的,仅仅是往GPIO口送数据(WriteFile)或者读数据(ReadFile)。至于AD采集的时序控制都是在应用层(EVC)实现。
这种做法的后果是,速度很慢,完成2000多个模拟电压的采集居然要近1分钟。我想过是否要将2084个数据采集的任务在驱动的ReadFile一次完成。这样子就需要将时序控制都在在该函数中。
我就有两个问题再跟大家请教:
1、将所有任务放在驱程,试图调用一次函数放回数据组首地址的做法科学吗?
2、那么,在底层驱动中要实现微秒的延时(WINCE),如何实现。
谢谢大家的不吝赐教!