do_gettimeofday函数是可以在内核种获取时间的函数。
使用背景:在测试项目中的一个功能模块时,测试人员发现延时严重,属于不可接受的范围。然后驱动就让上层的媒控开发人员和业务开发人员加打印,看一下这个模块调用所需要的时间。然后不知道为什么,业务人员和媒控人员统计出来底层调用时间要差100多ms。这样的话,确实有点不太科学。所以,只好驱动自己加获取时间的打印,来看看调用驱动的接口到底需要花费多长时间。
使用过程:man gettimeofday可以看函数的具体说明
只不过 gettimeofday是在用户空间获取时间的函数,在内核空间要用do_gettimeofday。
它的头文件包括在#include <linux/time.h>(ps:gettimeeofday函数的头文件包括在#include <sys/time.h>)
它对应的结构体为:
struct timeval {
time_t tv_sec; /* seconds */ 秒
suseconds_t tv_usec; /* microseconds */ 微秒
};
在函数中可以具体这样实现:
#include <linux/time.h>
struct timeval time;
int ms_0 = 0,ms_1 = 0, ms = 0;
do_gettimeofday(&time); /*第一次去获取时间*/
ms_0 = time.tv_sec * 1000 + time.tv_usec / 1000;
具体的函数模块调用:
do_gettimeofday(&time); /*第二次去获取时间*/
ms_1 = time.tv_sec * 1000 + time.tv_usec / 1000;
ms = ms_1 - ms_0; /*这个ms则是调用这个模块所花费的时间(单位:ms)*/
特别说明:do_gettimeofday没有返回值,要是用一个返回值接收的话,编译会报错。