#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 ++语言帮助我吗?
答案 0 :(得分:1)
timeSetEvent API将为您提供最佳的稳定性,并且可以低至1毫秒的间隔。
答案 1 :(得分:1)
新应用程序应使用CreateTimerQueueTimer!
此队列中的计时器(称为计时器队列计时器)是轻量级对象,使您可以指定在指定的到期时间到达时调用的回调函数。等待操作由线程池中的线程执行。
CreateTimerQueueTimer function。示例:Using Timer Queues(C ++)。
但是,粒度约为1毫秒,10毫秒的设置可能会导致9/11毫秒的周期性打嗝。
要获得更高的分辨率,您可能需要使用here所述的Clock::now()
来设置计时器轮。