上位机图像处理和嵌入式模块部署(统计函数执行时间)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/457026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一些基础函数

链表 ListNode* pnew ListNode(0,head); 栈和队列 stack—— stack<int> st; st.push(1); st.push(2); // st: 1 2 st.top(); // 2 st.size(); // 2 st.pop(); // st: 1 st.empty(); // false queue—— queue<int> que; que.push(1); que.push(2); // que: …

python 动态数据 展示 ,数据是由51单片机发送过来的,温度传感器。

import tkinter as tk import randomimport seriallis[] for i in range(50):lis.append(i1) # 打开串行端口 ser serial.Serial(COM3, 9600) # 9600为波特率&#xff0c;根据实际情况进行调整# 初始化数据 lis [random.randint(15, 35) for _ in range(50)]def update_data…

golang 引入swagger(iris、gin)

golang 引入swagger&#xff08;iris、gin&#xff09; 在开发过程中&#xff0c;我们不免需要调试我们的接口&#xff0c;但是有些接口测试工具无法根据我们的接口变化而动态变化。文档和代码是分离的。总是出现文档和代码不同步的情况。这个时候就可以在我们项目中引入swagge…

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)

[自然语言处理|NLP] 文本分类与情感分析,数据预处理流程,包括了同义词替换和拼写纠正,以及使用NLTK库和TextBlob库进行标记化和情感分析(附代码)。 自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,涉及了处理和理解人类语言的技术…

网工内推 | 上市公司运维岗,红帽认证优先,带薪年假,节日福利

01 捷科智诚 招聘岗位&#xff1a;配置管理岗-运维 职责描述&#xff1a; 1.负责日常配置管理平台的维护及优化&#xff0c;包括权限管理、基线管理、版本管理、发布管理、变更管理等&#xff1b; 2.负责维护各个管理平台的用户管理、权限管理、项目初始化等工作&#xff1b; …

睿尔曼超轻量仿人机械臂-- RM65-B手眼标定使用说明

一、前言 机器人的视觉系统分为固定场景视觉系统和运动的「手-眼」视觉系统。相机与机器人手臂末端&#xff0c;构成手眼视觉系统。根据相机在机器人安装位置的不同&#xff0c;手眼视觉系统分为Eye-in-Hand系统&#xff08;眼在手上&#xff09;和Eye-to-Hand系统&#xff08…

【芯片设计- RTL 数字逻辑设计入门 10 -- 奇偶校验实现】

文章目录 奇偶校验单目运算符&#xff08;|,^,&&#xff09;verilog codeverilog codetestbench code 问题总结 奇偶校验 现在需要对输入的32位数据进行奇偶校验,根据sel输出校验结果。 实际上这里做的是奇偶检测&#xff0c;如果是奇数个 1 则结果为 1&#xff0c;使用…

代码随想录算法训练营第四十五天(动态规划篇)|01背包

01背包理论基础 学习资料&#xff1a;代码随想录 (programmercarl.com) 相关链接&#xff1a;题目页面 (kamacoder.com) 背包题目分类 01背包定义 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次…

uniCloud ---- schema2code

目录 schema2code有两种方式 label属性 component属性 group属性 应用 DB Schema里有大量的信息&#xff0c;其实有了这些信息&#xff0c;前端将无需自己开发表单维护界面&#xff0c;uniCloud可以自动生成新增、修改、列表、详情的前端页面&#xff0c;以及admin端的列…

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29 《在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5》 https://blog.csdn.net/weixin_42145772/article/details/135074804?spm1001.2014.3001.5501 按照上面文章的方法…

【iOS ARKit】人形提取

为解决人形分离和深度估计问题&#xff0c;ARKit 新增加了 Segmentation Buffer&#xff08;人体分隔缓冲区&#xff09;和Estimated Depth Data Buffer&#xff08;深度估计缓冲区&#xff09;两个缓冲区。人体分隔缓冲区作用类似于图形渲染管线中的 Stencil Buffer&#xff0…

挂耳耳机哪个牌子好?推荐几款性价比超高的挂耳耳机

在寻求更轻便舒适的听音体验时&#xff0c;挂耳耳机逐渐成为众多用户的优先选择。市场上各式各样的耳挂耳机琳琅满目&#xff0c;种类繁多&#xff0c;挂耳耳机哪个牌子好&#xff1f;为了帮助大家更好地了解耳挂耳机的市场状况&#xff0c;我推荐几款性价比超高的挂耳耳机。 挂…