Измерить продолжительность функции таймера
У меня есть функция таймера (для опроса), которую я хочу вызывать каждые 1 мкс, но я также хочу убедиться, что есть достаточно времени для запуска других задач, поэтому я хочу измерить время, необходимое для выполнения этой функции. Для этого я думал, что мог бы использовать clock_gettime()
в начале моей функции и в самом конце. Теперь моя проблема в том, что возвращаемые два раза всегда одинаковы, и я просто не верю, что моя функция выполняется менее чем за 1 наносекунду - это невозможный период. Процессор работает на частоте 800 МГц. Мой код:
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 ответ
clog_gettime сбрасывается с системных часов. Член tv_nsec довольно бессмысленный.
Разрешение будет где-то между 60 Гц и 4 кГц.
Если вы хотите сделать отметку времени, вы должны использовать функциональность sysTimestamp.
При этом часто используется счетчик уменьшения (в архитектуре PPC), который обеспечивает точность ns.
Однако ваша система должна быть настроена на его использование.