【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
和pc上位机相比较,嵌入式设备的计算资源很多时候都是不足的。但是,嵌入式设备胜在稳定性和成本上面,这方面又是pc上位机所不能比的。所以,很多时候,针对这种客户既要、又要、还要的情况,我们只能把精力放在代码的优化上面。那么在整个软件执行的逻辑当中,找出花费时间最多的function,这是我们做好优化工作的重要前提。
1、利用gettimeofday获取时间
在linux系统中,gettimeofday函数可以帮助我们获取当前系统的时间。所以,一般来说截取一开始和结束的时间,就可以计算函数的执行时间了。
2、实例代码
为了演示gettimeofday怎么使用,我们准备了一段示例代码。基本做法就是,函数执行前记录下当前时间,函数执行后再次记录下当前时间,两个时间做一个差值,这样就知道当前函数花了多少时间。
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
int main() {
struct timeval start, end;
// 记录开始时间
gettimeofday(&start, NULL);
// 在这里放置你要测试的代码
// 例如,可以是一些循环或函数调用
sleep(1);
// 记录结束时间
gettimeofday(&end, NULL);
// 计算运行时间,单位为毫秒
long seconds = end.tv_sec - start.tv_sec;
long micros = ((seconds * 1000000) + end.tv_usec) - start.tv_usec;
double elapsed_time = (double) micros / 1000;
// 打印运行时间
printf("程序运行时间:%.2f 毫秒\n", elapsed_time);
return 0;
}
3、编译方法
对于上述代码的测试,我们是放在64位版本、树莓派4b上面进行的。编译比较简单,
gcc time.c -g -o time
当然,直接用aarch64-linux-gnu-gcc编译,也是一样的。板子本身就集成了编译器,所以使用比较方便。
aarch64-linux-gnu-gcc time.c -g -o time
4、实际运行
运行的话,就比较简单了,直接输入./time即可,看看花费的时间是不是差不多就是1000ms,
pi@raspberrypi:~/Desktop $ ./time
程序运行时间:1000.15 毫秒
5、继续改进和使用
如果是真实场景下使用,一般需要把它们整理成一个函数来处理,这样会更加方便一点。
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
static int flag = 0;
static struct timeval start;
static struct timeval end;
void record_time()
{
if( 0 == flag)
{
gettimeofday(&end, NULL);
flag = 1;
return;
}
start = end;
gettimeofday(&end, NULL);
// 计算运行时间,单位为毫秒
long seconds = end.tv_sec - start.tv_sec;
long micros = ((seconds * 1000000) + end.tv_usec) - start.tv_usec;
double elapsed_time = (double) micros / 1000;
// 打印运行时间
printf("程序运行时间:%.2f 毫秒\n", elapsed_time);
}
int main()
{
record_time();
// 在这里放置你要测试的代码
// 例如,可以是一些循环或函数调用
sleep(1);
record_time();
return 0;
}