目前常见的测函数耗时有两种方式:
一、 clock
头文件#include <time.h>
其中预定义宏CLOCKS_PER_SEC代表每秒共有多少个clocks,可根据此宏在计算耗时。
#include <time.h>
clock_t start, stop;
double timeuse = 0.0;
start = clock();
...
stop = clock();
timeuse = (double)(stop-start)*1000/CLOCKS_PER_SEC; // ms
printf("timeuse: %.3f ms\n", timeuse);
二、 time
头文件#include <time.h>
#include <time.h>
struct timeval start;
struct timeval stop;
double timeuse = 0.0;
gettimeofday(&start, NULL);
...
gettimeofday(&stop, NULL);
timeuse = (double)((stop.tv_sec-start.tv_sec)*1000000+stop.tv_usec-start.tv_usec)/1000.0;
printf("timeuse: %.3f ms\n", timeuse);
此两种方案,推荐使用第二种!!
若为纯C代码,两种方法测出的耗时一致;但在嵌入式平台上,第一种方法测出的耗时在某些情况下有问题。
具体场景:在嵌入式平台,使用硬件去处理某些任务时,若本身demo较简单,且采用阻塞式等待硬件完成。在此情况下,测出的耗时偏小,且不正确。
推测原因:简单任务时,硬件等待,系统中的clocks个数不增加或不准确。从而导致算出的时间较小。
解决方案:采用第二种方式!!