【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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;
}