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所示。
此外,菜单栏中的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之后,在高性能服务器领域得到广泛的应用࿰…...

新知同享|Cloud 开发加速创新,更加安全
谷歌在云平台中深度集成了生成式 AI 功能 帮助出海企业及开发者 轻松借力 AI 推动和实现创新 一起来看 2023 Google 开发者大会上 Google Cloud 如何加速创新,加强信息安全 关注 Google Cloud 的 3 个 AI 重点发展领域 了解生成式 AI 功能如何助推创意落地 精彩大会…...
el-form内容重置(解决点击保存关闭后再点击新增会有编辑携带的数据的问题)
主要代码: this.$refs[ruleForm].resetFields() <template><div class"add-edit-coupon"><el-dialog title"商品优惠券" top"10vh" :visible.sync"dialogVisible" width"660px" :before-close&…...

怎样吃透一个java项目?
前言 对于刚开始看视频敲代码,最忌讳的便是一上来就完全照着视频做,这么做就算完完全全的跟着视频做出来一个项目,始终都无法将里面具体的知识化为己有,单纯来说只是简单的复刻,视频的作者本身是不会对他在做该项目过…...
linux 网络命令
网络命令 配置ip 配置ip有两种方式 #方式一#setup可以使用配置工具进行配置setup#方式二 linux服务器默认网卡配置文件的目录/etc/sysconfig/network-scripts,进行配置网卡的配置文件类型- ifcfg-ethX 有线网卡的配置文件,eth0表示第一块网卡,eth1表示第…...

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

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

[构建自己的 Vue 组件库] 小尾巴 UI 组件库
文章归档于:https://www.yuque.com/u27599042/row3c6 组件库地址 npm:https://www.npmjs.com/package/xwb-ui?activeTabreadme小尾巴 UI 组件库源码 gitee:https://gitee.com/tongchaowei/xwb-ui小尾巴 UI 组件库测试代码 gitee:…...

由于电脑出现msvcr110.dll提示错误的解决方法
最近,我在尝试运行一款新的软件时,突然遇到了一个错误提示,提示说缺少msvcr110.dll文件,导致软件无法启动。在使用电脑过程中,我们常常会遇到一些系统文件丢失的问题。其中,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…...

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

高校网络安全体系建设及零信任安全架构应用的探索
网络安全是高校信息化建设的重中之重,它同时也随着高校信息化的快速发展而不断面临新的挑战。因此,要用发展的眼光去看待网络安全,体系化推进网络安全体系建设。山东师范大学校园信息化经过10多年的建设发展,在网络安全上探索出了…...
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(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实…...

如何预防最新的Mallox变种malloxx勒索病毒感染您的计算机?
导言: 在数字时代, .malloxx 勒索病毒的威胁一直悬在我们头上,如何应对这种威胁,以及在数据被勒索后如何恢复它们,都是备受关注的话题。本文91数据恢复将向您介绍 .malloxx 勒索病毒的独特工作方式,提供与众…...

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

Flutter 通过BottomSheetDialog实现抖音打开评论区,内容自动上推、缩放效果
一、先来看下实现的效果 实现上面的效果需要解决俩个问题 当列表进行向下滑动到顶部的时候,继续滑动可以让弹窗向下收起来弹出上下拖动的时候,视图内容跟着上下移动、缩放大小 二、实现弹窗上下滑动的时候,动态改变内容区的位置和大小 通过…...
Python读取TCP的4字节浮点数
Python4字节浮点数读取 背景读取4字节的浮点数总结 背景 用Python的tkinter开发人机界面。机器是MCU的无线服务器端。Python程序为Client,连接MCU TCP server。client发送21个字节帧。按modbusTCP发送。为提高通讯效率,server端在接到client发送来的8位…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...