hr_time.h:
----------
#include <windows.h>
typedef struct {
LARGE_INTEGER start;
LARGE_INTEGER stop;
} stopWatch;
void startTimer( stopWatch *timer);
void stopTimer( stopWatch *timer);
double LIToSecs( LARGE_INTEGER * L);
double getElapsedTime( stopWatch *timer);
------------------------------------------------------
hr_time.c:
------------
#include <windows.h>
#ifndef hr_timer
#include "hr_time.h"
#define hr_timer
#endif
void startTimer( stopWatch *timer) {
QueryPerformanceCounter(&timer->start);
}
void stopTimer( stopWatch *timer) {
QueryPerformanceCounter(&timer->stop);
}
double LIToSecs( LARGE_INTEGER * L) {
LARGE_INTEGER frequency;
QueryPerformanceFrequency( &frequency );
return ((double)L->QuadPart /(double)frequency.QuadPart);
}
double getElapsedTime( stopWatch *timer) {
LARGE_INTEGER time;
time.QuadPart = timer->stop.QuadPart - timer->start.QuadPart;
return LIToSecs( &time) ;
}
#include "TIMER1.h"
void main()
{
/**
* how to make This task is activated every 2ms ??
*/
TASK( Task2ms )
{
stopWatch s;
startTimer(&s);
if( XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_2msRstr() )
{
}
if( XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_2msRstr() )
{
}
stopTimer(&s);
getElapsedTime(&s);
}
}
如果我们在 TimeStart 和 TimeEnd 读取两个读数,那么差异就是计数的数量。将其除以计数器的频率 - 一个以每秒滴答数表示的值,结果是定时代码执行的时间长度。
上面的代码工作正常,但需要一些建议才能在 2ms 或 10ms 调用函数。任何人都可以帮助我吗?
声明一个 stopWatch 类型的变量,例如 s。然后在要计时的代码之前插入一个 startTimer(&s) 函数调用,在代码之后插入一个 stopTimer(&s) 调用。然后,您可以调用 getElapsedTime(&s) 以秒为单位返回精确到微秒的时间。
我的问题:如何在 2ms 或 10ms 调用特定函数?上面的代码哪里修改??
我修改了代码并添加了主函数:是否可以每 2ms 调用一次函数(如:XCPEVENT_DAQ_OVERLOAD & Xcp_DoDaqForEvent_2msRstr() 和 XCPEVENT_MISSING_DTO & Xcp_DoStimForEvent_2msRstr())?