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

news2024/12/23 16:47:02

一 前言

本文主要内容是讨论嵌入式软件的时间分析,供大家探讨,如果有疑问欢迎探讨。
对于汽车软件,往往对执行的时序和代码运行的时间有着严格要求。对于在主循环内执行的任务函数,不论是手写还是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%

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flink时间处理语义

背景 在flink中有两种不同的时间处理语义,一种是基于算子处理时间的时间,也就是以flink的算子所在的机器的本地时间为准,一种是事件发生的实际时间,它只与事件发生时的时间有关,而与flink算子的所在的本地机器的本地时…

利用grafana展示Zabbix数据可视化

导入zabbix数据源,可以直接创建图形了。 单击“”按钮,选择创建仪表盘,单击要创建的图形,图形种类有很多,常用的有图表,列表,报警清单,zabbix触发器,文本。 创建巡检图形…

C++ 多线程 学习笔记

线程睡眠很稳定,但无线程睡眠不稳定 线程调用类方法: 有参数时调用方法: 当参数为引用时: 当同一资源被多个线程同时引用时,为防止资源抢占,使用mutex,互斥锁 头文件#include "mutex"…

蓝桥杯官网练习题(纸牌三角形)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 A,2,3,4,5,6,7,8,9 共 99 张纸牌排成一个正三角形(A 按 1 计算)。要求每个边的和相等。 下图就是一种排法。 这样的排法可能会有很多。 如果…

thinkphp6-简简单单地开发接口

目录 1.前言TP6简介 2.项目目录3.运行项目运行命令访问规则 4.model db使用db连接配置model编写及调用调用接口 5.返回json格式 1.前言 基于上篇文章环境搭建后,便开始简单学习上手开发接口…记录重要的过程! Windows-试用phpthink发现原来可这样快速搭…

Spring Data JPA:简化数据库交互的艺术

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Jmeter 实现 mqtt 协议压力测试

1. 下载jmeter,解压 https://jmeter.apache.org/download_jmeter.cgi 以 5.4.3 为例,下载地址: https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip linux下解压: unzip apache-jmeter-5.4.3.zip 2. 下载m…

六)Stable Diffussion使用教程:图生图SD Upscale

这一篇说说SD放大(SD Upscale)。 图生图是没有 “高清修复” 选项的,因为从文生图的高清修复原理来看,图生图本身就是高清修复:只需要在重绘目标图像时,等比例增大图像的分辨率就可以了。 这里我们通过图库浏览器浏览一张图片,然后点击图生图,图片的所有出图参数就会…

运维学习之采集器 node_exporter 1.3.1安装并使用

参考《监控系统部署prometheus基本功能》先完成prometheus部署。 wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz下载压缩包。 tar -zxf node_exporter-1.3.1.linux-amd64.tar.gz进行解压。 cp node_e…

安全实战 | 怎么用零信任防范弱密码?

防范弱密码,不仅需要提升安全性,更需要提升用户体验。 比如在登录各类业务系统时,我们希望员工登录不同系统不再频繁切换账号密码,不再需要3-5个月更换一次密码,也不再需要频繁的输入、记录、找回密码。 员工所有的办…

Spring Boot与Kubernetes:现代云部署的完美组合

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

第六章 图 四、图的广度优先遍历(BFS算法、广度优先生成树、广度优先生成森林)

一、实现步骤 广度优先遍历的实现步骤如下: 1.从图的某一个节点开始,将该节点标记为已经访问过的节点。 2.将该节点加入到队列中。 3.当队列非空时,执行以下操作: a. 取出队列队首节点,并遍历该节点与之相邻的所有…

Spring AOP:面向切面编程在实际项目中的应用

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

算法之位运算

前言 位运算在我们的学习中占有很重要的地位,从二进制中数的存储等都需要我们进行位运算 一、位运算复习 1.位运算复习 按位与(&):如果两个相应的二进制位都为1,则该位的结果值才为1,否则为0 按位或( | ):如果…

Spring Batch:处理大数据和批量任务的解决方案

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于自组织特征映射聚类算法(SOM)的数据聚类可视化 可直接运行 注释清晰 Matlab语言 1.多特征输入&…

数据接口工程对接BI可视化大屏(四)创建工程

第4章 创建工程 4.1 新建工程 在IDEA中新建工程,并使用SpringInitializr来创建: 点击下一步,输入项目的GAV坐标及工程构造方式后点击下一步: 点击下一步,选择主版本和模块,这里以Spring2.x版本为例&#…

Spring Reactive:响应式编程与WebFlux的深度探索

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

CLEAN-SC波束形成声源识别改进

CLEAN-SC 波束形成声源识别方法计算速度快、成像干净清晰、结果准确度高,但当传统延迟求和算法在各声源处输出的主瓣严重融合时,亦无法准确分辨声源。造成该缺陷的原因为: 主瓣严重融合时,CLEAN-SC 所基于的延迟求和输出峰值所在聚焦点即为声…

一、认识GitHub项目 —— TinyWebServer

认识GitHub项目 —— TinyWebServer 一、前言 这个项目是Linux下C轻量级Web服务器。几乎是想从事C服务器开发方向的同学的必备初始项目了。属于那种,“烂大街”,但是你又不能不会的项目。 对这个项目笔者打算多分几章讲解,帮助刚用GitHub&a…