当前位置: 首页 > news >正文

ISYSTEM调试实践11-Profiler Timeline和软件运行时间分析

一 前言

本文主要内容是讨论嵌入式软件的时间分析,供大家探讨,如果有疑问欢迎探讨。
对于汽车软件,往往对执行的时序和代码运行的时间有着严格要求。对于在主循环内执行的任务函数,不论是手写还是Autosar生成,能否节拍执行到,能否在规定的时间内执行完成都非常重要,这中间设计最重要的参数就是WCET(最坏执行时间, Worst-Case Execution Time),一个是抖动时间(JIT,JITter)。最坏执行时间如果过长,将影响到其他任务的执行,甚至造成程序卡死阻塞。而抖动时间会造成程序本该被调用实际却没有,对于需要周期检测功能的函数,这部分周期的紊乱会造成数据采集的失真,对于后续数据的处理造成困难。
脱离硬件的软件代码可以通过理论计算最大执行路径的情况下估算出来,嵌入式平台执行的代码普遍和硬件息息相关,我理解的办法只能通过大量的测试和统计来进行,使用类似劳德巴赫 isystem这种调试器辅助完成。

2 软件时间及代码覆盖率

软件时间参数

软件时间分析包括软件核心执行时间、软件最坏情况执行时间以及周期性抖动。下面将简单介绍一下各个参数的含义及计算方式:
核心执行时间(CET, Core Execution Time):
它指示CPU实际花费或已经花费了多少时间来执行中断、任务、Runable(接口)、函数或代码片段(如循环体)等,但不包括CPU处理任何被抢占(例如中断或更高优先级的任务抢占)所花费的时间。
最坏情况执行时间(WCET, Worst-Case Execution Time):它是CET在最坏情况下可能的最大值。对于嵌入式系统软件来说,软件要在一定时间范围内对外部事件做出可靠响应,即每个实时任务应该在截止时间前完成,否则系统会失败。而WCET提供了在最坏的情况下系统的运行时间,我们需要使这个时间小于所规定的最大响应时间,才能够保证程序质量和系统的可靠运行[5]。
周期性抖动(JIT,JITter):用于描述实际周期时间(DT)与期望周期(PER)之间的偏差。通过该值,可以知道相应事件发生的时间点是否准确。若该值为负,则说明事件过早发生;若该值为正,则说明事件发生过晚。
在这里插入图片描述

代码覆盖率

代码覆盖率,是一种通过计算测试过程中被执行的源代码占全部源代码的比例,进而间接度量软件质量的方法。代码覆盖率的测量有助于我们找到一组测试用例未执行到的程序区域,而这指示一些代码仍然可能包含严重错误。查找永远不会执行的代码,这些代码被称作“死代码”,在分配资源时会产生不必要的开销,并且由于没有经过测试,是一个潜在的危险。此外,代码覆盖率测试还能识别出冗余测试用例。
在根据 ISO26262、DO-178B 或 DO-178C 标准认证产品时,通常需要进行覆盖测量。其中,在ISO26262标准 [6]中,根据不同的安全等级也提出了不同的覆盖率要求。

3 实现过程及结果分析

现以NXP MPC5744P为核心的整车控制器作为硬件平台,通过iSYSTEM的BlueBox ic5700硬件工具及winIDEA软件工具,实现嵌入式软件的时间分析和代码覆盖率分析。

3.1硬件连接

硬件连接主要是将电脑、BlueBox和整车控制器三者连接起来,分为以下几步:
(1)连接电源线
(2)连接PC和BlueBoxUSB
(3)连接接地线
(4)连接BlueBox和控制器
如图1所示。此处应该注意的是上电顺序为先打开BlueBox的电源然后再给控制器上电,关闭的时候应按照相反的顺序。
在这里插入图片描述

图1 硬件连接图

3.2 结果分析

winIDEA中的Analyzer作为一个功能强大的工具,能够记录程序执行跟踪、数据跟踪或其他跟踪消息,然后分析这些记录以生成覆盖率或时序测量。本文主要介绍Profiler Timeline与Coverage Statistics两个窗口,这两个窗口与我们分析嵌入式软件的软件时间和代码覆盖率紧密相关,以上两个窗口如图2所示。
在这里插入图片描述

图2 Analyzer功能分析图

3.2.1软件时间结果分析

Profiler Timeline窗口可以显示收集到的分析数据,在这里,你可以清楚地查看各个事件间是如何相互关联的,如图3所示。

图3 Profiler Timeline窗口

此外,菜单栏中的Properties功能更是分析软件时间的得力助手。其中Net Time表示测量函数处于活动状态的时间;Gross Time表示测量任务处于活动状态或挂起的时间;Call Time表示测量函数进入和退出之间的时间;Period显示连续函数调用之间经过的时间;Inactive表示函数之外花费的时间。如图4所示。
在这里插入图片描述

下面以函数typeFunctionPointer为例来看看Profiler Timeline窗口到底是如何帮助我们进行软件时间分析的。如图5所示,红色块表示该区域处于活动状态,即函数typeFunctionPointer在主体中执行,任务正在运行;浅红色块表示该区域被挂起,任务被函数Mult抢占。因此,函数typeFunctionPointer的核心执行时间CET=CET1+CET2+CET3+CET4。由图6 Properties窗口 Net Time可知核心执行时间为638ns,而最大核心执行时间即为最坏情况执行时间,即WCET为1.575us。
在这里插入图片描述

图5 核心执行时间分析图
设置函数typeFunctionPointer的执行周期为15us,即PER=15us,连续两次开始运行typeFunctionPointer所间隔的时间差为DT,如图7所示。由窗口Properties下的Period可知函数typeFunctionPointer的实际执行周期DT的值,如图8所示。由公式(1)可知,周期性抖动JIT的平均值为0.298us,最大值为0.477us,最小值为0.271us。
在这里插入图片描述

3.2.2代码覆盖率结果分析

如图7所示,iSYSTEM Analyzer提供语句覆盖、函数覆盖、调用覆盖、对象级条件覆盖等覆盖测量。Coverage Statistics窗口显示地址范围以及每个下载文件、模块、函数、源代码行和对象级指令的覆盖率信息。
以函数Adress_TestScopes为例,从图8 可以看出,其源代码行级的语句覆盖率为93%,目标代码级别的语句覆盖率为97%,对象级别条件覆盖率为83%,调用覆盖率为100%。其中几项覆盖率未达到100%的原因是判断语句if (c==1)只有50%的覆盖率。结合代码旁的标志,其中, 表示分支从未执行(0% 覆盖率), 表示分支条件至少评估为真一次,但从未评估为假(覆盖率为 50%), 表示分支条件至少评估为假一次,但从未判定为真(50% 覆盖率), 分支条件至少评估为真和假一次(100% 覆盖率),根据以上规定,在可知,第110代码的判断语句只执行过为真,并没有执行过为假条件下的函数语句。

在这里插入图片描述

四 计算MCU负载

ISYSTEM本来有计算CPU负载的功能,可能是我的设置问题,测试的结果一致不准确,我现在利用Profiler Timeline功能的两个统计参数。
Net Time:
实际花费在函数自己身上的时间,Net Time减去调用其他函数花费的时间
Gross Time:
就是进入该函数以后所有花费的时间,包括函数自己和函数调用其他函数的时间。

在这里插入图片描述在这里插入图片描述这里将while(1)下面所有调用的函数放在一个测试函数Rte_Call_ScheDispatch以内,调用的函数根据定时器标志位判断是否执行。
在这里插入图片描述深色就代表调用的函数没有达到执行条件,浅红色代表去执行别的函数未返回。那么MCU的负载率就是深红色所占的百分比,即1-Net Time/ Gross Time即1-857/4328 = 82%

在这里插入图片描述

相关文章:

ISYSTEM调试实践11-Profiler Timeline和软件运行时间分析

一 前言 本文主要内容是讨论嵌入式软件的时间分析,供大家探讨,如果有疑问欢迎探讨。 对于汽车软件,往往对执行的时序和代码运行的时间有着严格要求。对于在主循环内执行的任务函数,不论是手写还是Autosar生成,能否节拍执行到&…...

第十八章 ObjectScript - 使用例程

文章目录 第十八章 ObjectScript - 使用例程例程Procedures, Functions, and Subroutines 过程、函数和子程序procedurefunctionsubroutine 第十八章 ObjectScript - 使用例程 例程 可以将例程视为 ObjectScript 程序。例程可以从头开始编写,也可以在编译类时自动…...

Linux中select poll和epoll的区别

在Linux Socket服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select、poll和epoll是Linux API提供的I/O复用方式,自从Linux 2.6中加入了epoll之后,在高性能服务器领域得到广泛的应用&#xff0…...

新知同享|Cloud 开发加速创新,更加安全

谷歌在云平台中深度集成了生成式 AI 功能 帮助出海企业及开发者 轻松借力 AI 推动和实现创新 一起来看 2023 Google 开发者大会上 Google Cloud 如何加速创新,加强信息安全 关注 Google Cloud 的 3 个 AI 重点发展领域 了解生成式 AI 功能如何助推创意落地 精彩大会…...

el-form内容重置(解决点击保存关闭后再点击新增会有编辑携带的数据的问题)

主要代码&#xff1a; this.$refs[ruleForm].resetFields() <template><div class"add-edit-coupon"><el-dialog title"商品优惠券" top"10vh" :visible.sync"dialogVisible" width"660px" :before-close&…...

怎样吃透一个java项目?

前言 对于刚开始看视频敲代码&#xff0c;最忌讳的便是一上来就完全照着视频做&#xff0c;这么做就算完完全全的跟着视频做出来一个项目&#xff0c;始终都无法将里面具体的知识化为己有&#xff0c;单纯来说只是简单的复刻&#xff0c;视频的作者本身是不会对他在做该项目过…...

linux 网络命令

网络命令 配置ip 配置ip有两种方式 #方式一#setup可以使用配置工具进行配置setup#方式二 linux服务器默认网卡配置文件的目录/etc/sysconfig/network-scripts&#xff0c;进行配置网卡的配置文件类型- ifcfg-ethX 有线网卡的配置文件,eth0表示第一块网卡&#xff0c;eth1表示第…...

QUIC协议科普导入(一)

一&#xff1a;QUIC协议导入 QUIC是一个通用的传输层网络协议&#xff0c;最初由Google的Jim Roskind设计&#xff0c;2012年实现并部署&#xff0c;2013年随着实验范围的扩大而公开发布&#xff0c;并向IETF描述。虽然长期处于互联网草案阶段&#xff0c;但在从Chrome浏览器到…...

matlab 矩阵逆运算的条件数

目录 一、概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 1、算法概述 条件数法是目前应用最为广泛的一种病态诊断方法。一个方阵…...

[构建自己的 Vue 组件库] 小尾巴 UI 组件库

文章归档于&#xff1a;https://www.yuque.com/u27599042/row3c6 组件库地址 npm&#xff1a;https://www.npmjs.com/package/xwb-ui?activeTabreadme小尾巴 UI 组件库源码 gitee&#xff1a;https://gitee.com/tongchaowei/xwb-ui小尾巴 UI 组件库测试代码 gitee&#xff1a…...

由于电脑出现msvcr110.dll提示错误的解决方法

最近&#xff0c;我在尝试运行一款新的软件时&#xff0c;突然遇到了一个错误提示&#xff0c;提示说缺少msvcr110.dll文件&#xff0c;导致软件无法启动。在使用电脑过程中&#xff0c;我们常常会遇到一些系统文件丢失的问题。其中&#xff0c;msvcr110.dll是Windows操作系统中…...

[LINUX使用] iptables tcpdump wireshark tshark

iptables: 收到来自 10.10.10.10 的数据后都丢弃 iptables -I INPUT -s 10.10.10.10 -j DROP 直接 reject 来自 10.10.10.* 网段的数据 iptables -I INPUT -s 10.10.10.0/24 -j REJECT tcpdump: dump eth0的数据到本地 tcpdump -i eth0 -w dump.pcap 只抓 目的地址是 10…...

显示器鼠标滚动时或者拖拽文字变为绿色

新电脑&#xff0c;新显示器&#xff0c;看文章时滚动鼠标滑轮&#xff0c;文字颜色就变为绿色。 拖住文本文档或者浏览器等有文字的窗口&#xff0c;文字也会变为绿色。 静止时一点儿问题没有。 以下视频展示滚动和拖拽的操作&#xff0c;视频看不出变色&#xff0c;只参考…...

高校网络安全体系建设及零信任安全架构应用的探索

网络安全是高校信息化建设的重中之重&#xff0c;它同时也随着高校信息化的快速发展而不断面临新的挑战。因此&#xff0c;要用发展的眼光去看待网络安全&#xff0c;体系化推进网络安全体系建设。山东师范大学校园信息化经过10多年的建设发展&#xff0c;在网络安全上探索出了…...

Android Studio设置

Android Studio设置 一、主题 1.下载插件并重启 Material Theme UI 2.下载插件ChroMATERIAL 3.设置主题File >> Settings >> Editor >> Colors Scheme >> Scheme >> ChroMATERIAL 4.设置logcat色值File → Settings → Editor → Colors Schem…...

【RabbitMQ】介绍及消息收发流程

介绍 RabbitMQ 是实现 AMQP&#xff08;高级消息队列协议&#xff09;的消息中间件的一种&#xff0c;最初起源于金融系统&#xff0c;用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实…...

如何预防最新的Mallox变种malloxx勒索病毒感染您的计算机?

导言&#xff1a; 在数字时代&#xff0c; .malloxx 勒索病毒的威胁一直悬在我们头上&#xff0c;如何应对这种威胁&#xff0c;以及在数据被勒索后如何恢复它们&#xff0c;都是备受关注的话题。本文91数据恢复将向您介绍 .malloxx 勒索病毒的独特工作方式&#xff0c;提供与众…...

软件测试中的43个功能测试点总结

功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。针对web系统的常用测试方法如下&#xff1a; 1、页面链接检查&#xff1a; 每一个链接是否都有对应的页面&#xff0c;并且页面之间切换正…...

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果

一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候&#xff0c;继续滑动可以让弹窗向下收起来弹出上下拖动的时候&#xff0c;视图内容跟着上下移动、缩放大小 二、实现弹窗上下滑动的时候&#xff0c;动态改变内容区的位置和大小 通过…...

Python读取TCP的4字节浮点数

Python4字节浮点数读取 背景读取4字节的浮点数总结 背景 用Python的tkinter开发人机界面。机器是MCU的无线服务器端。Python程序为Client&#xff0c;连接MCU TCP server。client发送21个字节帧。按modbusTCP发送。为提高通讯效率&#xff0c;server端在接到client发送来的8位…...

javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别

项目结构 依赖文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/…...

Docker容器技术实战-1

1.docker容器 docker就好比传统的货运集装箱 每个虚拟机都有独立的操作系统&#xff0c;互不干扰&#xff0c;在这个虚拟机里可以跑任何东西 如应用 文件系统随便装&#xff0c;通过Guest OS 做了一个完全隔离&#xff0c;所以安全性很好&#xff0c;互不影响 容器 没有虚拟化…...

LeetCode算法题:2. 两数相加

文章目录 题目描述&#xff1a;通过代码创建新一串新链表&#xff1a; 题目描述&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以…...

ResNet 09

一、发展 1989年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet。 1998年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet-5 AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Sca…...

什么是脚本语言,解释脚本语言的特点和应用领域

1、什么是脚本语言&#xff0c;解释脚本语言的特点和应用领域。 脚本语言是一种编程语言&#xff0c;通常用于自动化任务或脚本。它们通常比传统的编程语言更容易学习和使用&#xff0c;因为它们通常具有更少的语法和更简单的命令。 脚本语言的特点包括&#xff1a; 简单易学…...

selenium 定位不到元素的几种情况

1.动态id定位不到元素for example: //WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));WebElement xiexin_element = driver.findElement(By.xpath("//span[contains(.,写 信)]")); xiexin_element.click(); 上面一段…...

IDEA启动项目很慢,无访问

用idea启动本地项目&#xff0c;然后自测。 今天突然发现用postman访问不到&#xff0c;用浏览器也访问不到&#xff0c;提示信息就跟项目没有启动时一样&#xff08;启动日志过多&#xff0c;并没有发现是项目没有启完&#xff09;。 但是用cmd直接启动jar包&#xff0c;访问…...

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测&#xff1b; 2.运行环…...

简单了解ARP协议

目录 一、什么是ARP协议&#xff1f; 二、为什么需要ARP协议&#xff1f; 三、ARP报文格式 四、广播域是什么&#xff1f; 五、ARP缓存表是什么&#xff1f; 六、ARP的类型 6.1 ARP代理 6.2 免费ARP 七、不同网络设备收到ARP广播报文的处理规则 八、ARP工作机制原理 …...

【Linux】Stratis是什么?Stratis和LVM有什么关系和区别?

背景核心特性Stratis与LVM 的联系与区别感谢 &#x1f496; 背景 在过去&#xff0c;Linux 用户通常依赖于多个工具和技术来管理存储资源&#xff0c;包括 LVM、mdadm、文件系统工具等。这些工具各自有自己的特点和用途&#xff0c;但也带来了复杂性和学习曲线。Stratis 的出现…...