测量定时器功能的持续时间

时间:2013-11-15 21:39:55

标签: vxworks nanotime time-measurement

我有一个计时器功能(用于轮询),我想每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++;
}

我做错了什么?开始和停止时间总是一样的......

1 个答案:

答案 0 :(得分:1)

clog_gettime被驱逐出系统时钟。 tv_nsec成员毫无意义 分辨率将介于60 Hz和4KHz之间。

如果要进行时间戳,则应使用sysTimestamp功能 这通常使用递减计数器(在PPC架构中),它提供ns精度。

但是,您的系统必须配置为使用它。