我有一个计时器功能(用于轮询),我想每1uS调用一次,但我也想确保有足够的时间运行其他任务,所以我想测量执行这个功能所需的时间。为此,我想我可以在函数的开头和最后使用clock_gettime()
。现在我的问题是,返回的两次总是相同的,我只是不相信我的功能在不到1纳秒的时间内完成 - 这是不可能的时期。 CPU的时钟频率为800MHz。
我的代码:
struct timespec tempTime_start;
struct timespec tempTime_stop;
static int print = 0;
if(clock_gettime(CLOCK_REALTIME, &tempTime_start))
printf("Error in clock_gettime(): %s",strerror(errno));
...
...MY FUNCTION...
int i = 0;
for (i = 0;i<100000;i++);
if(clock_gettime(CLOCK_REALTIME, &tempTime_stop))
printf("Error in clock_gettime(): %s",strerror(errno));
if (print <= 100){
printf("%dDuration: %d\n",print,(tempTime_stop.tv_nsec - tempTime_start.tv_nsec));
printf("Start: %d\n",tempTime_start.tv_nsec);
printf("Stop: %d\n",tempTime_stop.tv_nsec);
print++;
}
我做错了什么?开始和停止时间总是一样的......
答案 0 :(得分:1)
clog_gettime被驱逐出系统时钟。 tv_nsec成员毫无意义 分辨率将介于60 Hz和4KHz之间。
如果要进行时间戳,则应使用sysTimestamp功能 这通常使用递减计数器(在PPC架构中),它提供ns精度。
但是,您的系统必须配置为使用它。