#include "target.h"
#include "xcp.h"
#include "LocatedVars.h"
#include "osek.h"
/**
* This task is activated every 10ms.
*/
long OSTICKDURATION;
TASK( Task10ms )
{
void XCP_FN_TYPE Xcp_CmdProcessor( void );
uint32 startTime = GetQueryPerformanceCounter();
/* Trigger DAQ for the 10ms XCP raster. */
if( XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_10msRstr() )
{
++numDaqOverload10ms;
}
/* Update those variables which are modified every 10ms. */
counter16 += slope16;
/* Trigger STIM for the 10ms XCP raster. */
if( enableBypass10ms )
{
if( XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_10msRstr() )
{
++numMissingDto10ms;
}
}
duration10ms = (uint32)( ( GetQueryPerformanceCounter() - startTime ) / STOPWATCH_TICKS_PER_US );
}
从 C++ 同步到某个精确时钟以在特定时间间隔调用函数(在正常情况下几乎没有抖动)的最简单(和/或最好)方法是什么?我现在在WINDOWS操作系统上工作。 上面的代码适用于 RTAS OSEK,但我想在 Windows 操作系统的特定时间间隔调用函数。任何人都可以用 C++ 语言帮助我吗?
最佳答案
新应用程序应使用 CreateTimerQueueTimer!
此队列中的计时器(称为计时器队列计时器)是轻量级对象,使您能够指定在指定的到期时间到达时调用的回调函数。等待操作由线程池中的线程执行。
CreateTimerQueueTimer function 。示例:Using Timer Queues (C++)。
但是,粒度约为1ms,设置10ms可能会导致9/11ms周期性卡顿。
要获得更高的分辨率,您可能必须使用 Clock::now()
设置定时器轮,如所述 here .
关于c++ - 高精度事件定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638163/