Зависит от вашей встроенной платформы и того, какой тип времени вы ищете. Для встроенного Linux есть несколько способов сделать это. Если вы хотите измерить количество процессорного времени, используемого вашей функцией, вы можете сделать следующее:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define SEC_TO_NSEC(s) ((s) * 1000 * 1000 * 1000)
int work_function(int c) {
// do some work here
int i, j;
int foo = 0;
for (i = 0; i < 1000; i++) {
for (j = 0; j < 1000; j++) {
for ^= i + j;
}
}
}
int main(int argc, char *argv[]) {
struct timespec pre;
struct timespec post;
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &pre);
work_function(0);
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &post);
printf("time %d\n",
(SEC_TO_NSEC(post.tv_sec) + post.tv_nsec) -
(SEC_TO_NSEC(pre.tv_sec) + pre.tv_nsec));
return 0;
}
Вам нужно будет связать это с библиотекой реального времени, просто используйте следующее для компиляции вашего кода:
gcc -o test test.c -lrt
Вы также можете прочитать справочную страницу на clock_gettime
. Есть некоторые проблемы с запуском этого кода в системе на основе SMP, которые могут сделать тестирование недействительным. Вы можете использовать что-то вроде sched_setaffinity()
или командную строку cpuset
, чтобы заставить код только на одном ядре.
Если вы хотите измерить пользовательское и системное время, то вы можете использовать times(NULL)
, который возвращает что-то вроде jiffies. Или вы можете изменить параметр для clock_gettime()
с CLOCK_THREAD_CPUTIME_ID
на CLOCK_MONOTONIC
... но будьте осторожны с CLOCK_MONOTONIC
.
Для других платформ вы самостоятельно.
Drew