车载基础软件——嵌入式系统时间特性分析

news2024/10/7 18:28:01

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:

人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是,他们想让你怀疑自己。

本文主要介绍车载基础软件——嵌入式系统时间特性分析。

文章主要有如下几个内容:

-> 1、网络管理测试验证

-> 2、诊断服务测试验证

-> 3、BSW层里的操作系统OS

近年来,随着汽车功能的不断完善和多样化,车载电子系统日益复杂。从控制器层面看,集成度越来越高,CPU 负载不断增加。如何确保软件集成安全、优化设计、提高资源利用率、降低成本成为相关设计人员亟待解决的问题;另一方面,ISO26262 及 ASPICE 等相关标准中分别在软件架构、单元和集成阶段对性能分析提出了明确的需求。如何验证满足实时系统的时间性能需求,构建符合 ISO26262 和 ASPICE 标准的产品也越来越引起相关人员的重视。

针对上述问题,AUTOSAR 标准在 4.0 版本以后即对嵌入式系统性能分析提出了相关方法论指导。其中,《AUTOSAR Specification of Timing Extensions》主要定义了不同级别的时间行为需求 / 规范标准,《Recommended Methods and Practices for Timing Analysis and Design within the AUTOSAR Development Process》(以下简称 Timing Analysis)主要提供了性能问题方法论指导。如图:

就分析内容而言,根据相关标准的定义,嵌入式系统的性能问题主要分为控制器级、网络级和功能级(端到端)三个维度。本文主要关注控制器级别的相关性能问题。结合欧洲相关标准的定义,控制器级别的性能分析问题又可以进一步分为代码级分析和调度级分析。其中,代码级分析的对象为单个的任务(Task)/ 中断(Interrupt),不考虑任务 / 中断 / 进程间的抢占情况。而调度级分析则主要考虑多任务 /中断间相互抢占的情况下,各任务 / 中断的响应时间的结果(包括本身的代码执行时间和被抢占的时间)。如图:

就分析方法而言,可以分为理论分析、仿真和追踪三种,或者基于模型和基于追踪两种。后者与时间特性流程 / 研发流程更相契合。在本文中,我们采取后一种分类方法进行相关介绍:

一、基于模型的分析

基于模型的分析按照分析内容,又分为代码级分析和调度级分析。根据ISO26262 及 ASPICE 标准,代码级的相关指标主要包括最差情况代码执行时间(WCET,WorstCase Execution Time)和最差情况堆栈用量分析。调度级分析要求指标主要包括 CPU 负载、Task\Interrupt\Event Chain 最差情况响应时间(WCRT,WorstCase Reaction Time)等。

->代码级基于模型的分析方案

代码级基于模型的分析方法是指不需要在实际的目标硬件环境中运行,而是通过直接从程序结构中计算出代码最差情况执行时间,或者在目标环境仿真器中仿真而得出代码执行时间分布范围的方法。

为了满足功能安全和 ASPICE 中对性能问题最差情况的分析要求,一般推荐使用基于模型的分析方案。常见的分析方案如图所示:

常见的代码级基于模型的性能分析工具有 aiT、TimingProfiler、StackAnalyer 等。

-> 调度级基于模型的分析方案

调度级基于模型的分析方法是指不需要在实际的目标硬件环境中运行,而是基于目标操作系统、代码执行时间范围和调度配置进行静态数值分析而计算出最差情况任务 / 中断响应时间,或者在调度仿真器中仿真而得出任务 / 中断响应时间分部范围的方法。

为了满足功能安全和 ASPICE 中对性能问题最差情况的分析要求,一般推荐使用基于模型的分析方案。常见的分析方案如图所示:

常见的调度级基于模型的性能分析工具有 Symtavision、Inchron、Timing-Architects 等。

嵌入式实时系统必须保证每一个操作系统的任务均在规定的时间内作正确的响应,如果由于某个任务执行时间过长或者调度设计不合理而影响其他的任务的正常执行,进而超出任务规定响应时间的情况,会对系统的正常运作造成很大的影响。根据软件的严重度等级,这些潜在安全隐患的排除需要通过形式化的验证方法或者具有充分的测试覆盖度的测试方法进行证明。

针对性能问题,在适航标准 DO178B 的第六章中明确指出 “Testing, in general, cannot show the absence of errors” ,也就是说,测试一般不能用来证明某些性能问题的清除,比如代码执行时间、堆栈用量、代码运行时错误等,一般通过测试来证明是不足够的,因为没有一种测试的手段可以对性能问题达到 100% 的覆盖度,即无法找出 WorstCase的工况。因而,标准中提出某些性能错误的排除可以通过形式化的方法(Formal methods)进行证明,而形式化方法即为一种基于模型的分析方法。此外,由于基于模型的分析方法不需要硬件环境,使得在设计阶段即对性能问题进行分析成为可能,从而尽早地发现和排除相关问题,避免在集成阶段再发现问题而导致时间和成本的浪费。

-> 基于追踪的分析

基于追踪的分析按照分析内容,又分为代码级追踪和调度级追踪。

追踪的对象是实际目标系统,一般通过代码插桩等手段,持续地进行事件(events)及对应时间戳(timestamp) 的采集和记录,这些记录的数据可以存放在目标硬件的内存或者通过相关接口实时导出。这些事件的选择可以是代码块级别、函数级别或任务 / 中断级别等,也可以细化到机器指令级别。根据不同的事件级别可以基于追踪文件分别重建代码块、函数、任务 / 中断、甚至是每个机器指令的实际执行时序情况。

相应的,对机器指令、代码块、函数等基于追踪文件的时序重建,可以分析得到代码执行时间最小值、最大值、平均值等数据,即为代码级追踪分析的内容。而对任务 / 中断基于追踪文件的时序重建,可以分析得到任务 / 中断延时和 CPU 实时负载的最小值、最大值、平均值等数据,即为调度级追踪分析的内容。

常见的基于追踪的代码级性能分析工具有 TimeWeaver+Lauterbach、Gliwa、RapiTime 等;常见的基于追踪的调度级性能分析工具有 TraceAnalyzer、Lauterbach、iSystem、Greenhill、RapiTask、Gliwa 等。

搁笔分享完毕!

愿你我相信时间的力量

做一个长期主义者

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

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

相关文章

AI人工智能逻辑回归的原理、优缺点、应用场景和实现方法

逻辑回归(Logistic Regression)是一种常见的机器学习算法,它被广泛应用于分类问题。在人工智能(Artificial Intelligence,简称AI)领域中,逻辑回归是一种简单而有效的算法,可以用于许…

GC 三色标记算法(Go Java版本)

一、前言 GC全称Garbage Collection,目前主流的垃圾回收算法有两类,分别是追踪式垃圾回收算法(Tracing garbage collection)和引用计数法( Reference counting )。 而三色标记法是属于追踪式垃圾回收算法…

github copilot chat申请,安装,及常见问题解决

申请 首先申请,并开通copilot, 地址为:https://github.com/features/copilot,copilot 一个月10美金,第一个月免费,支持国内的信用卡。 开通copilot之后,可以申请 copilot chat 的预览版功能,网…

5-高级SQL查询

PS:插入查询结果 把一张表查询出的结果,插入到另一张表中。要求两张表的列数和列类型要匹配。 前面讲的所有select规则在此处都适用~ 1.聚合查询 聚合查询:行和行之间进行运算。带表达式查询:列和列之间进行运算。 常⻅的聚合函…

MySQL——聚合函数

我们上一篇讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。接下来我们来看看什么是聚合函数及聚合函数的分类 1. 聚合函数介绍 1.1 什么是聚合函数? 聚合函数作用于…

redis 7.x 缓存双写一致性的解决方案

一 redis缓存双写一致性 1.1 保证redis一致性的原则 1.给缓存设置过期时间,定期清理缓存并写回,是保证最终一致性的解决方案。使用场景:在数据读多写少的情况下作为缓存来使用。 我们可以对已存入缓存的数据设置过期时间,所有…

Qt-学习 QJson协议解析

内容来源于哔站视频,仅仅作为自己的笔记记录,感兴趣的小伙伴去原作品大call(此处给作者三鞠躬),Json以及Json在Qt中的使用 【Qt/C/C】_哔哩哔哩_bilibili 目录 1、Json介绍: 1.1 Json的定义 1.2 Json的数据格式 1…

Java面试知识点(全)- Java并发- Java并发基础

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 多线程解决什么问题 CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异&#xff0c…

thinkphp6中使用session设置无效问题的解决及注意事项

就如thinkphp官方在文档开头所描述的一样,ThinkPHP6.0基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化;其实从5.x版本开始thinkphp本身就是为api应用而生。特别是在6.0版本开始框架默认压根不开启和…

大数据-玩转数据-FLINK(Yarn模式)的安装与部署

一、为什么要用Flink on Yarn HA 模式 默认情况下,Flink 只有一个JobManager,这将导致单点故障,使用JobManager HA ,集群可以从单点故障中恢复,从而避免单点故障,我们可以在Standalone 或 Flink on Yarn 集…

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2---章节小测微认证考试

微认证考试 1、以下不属于模型适配工具内置的模型的是? A. 目标检测模型 B. 图像分类模型 C. 语义分割模型 D. 关键点检测模型 C 2、模型适配工具安装前需要先安装? A. mobaXterm B. python3.9 C. Vscode D. Anaconda D 3、在哪个目录下可查看端…

docker 部署 -v指令遇到docker: invalid reference format.

检查了半天才发现,换行符后面不能有空格!有空格就报错!

vite创建vue3项目

vite创建vue3项目 方式一(推荐) 脚手架快速创建,勾选依赖的方式 这种方式创建的项目最快捷,因为基本依赖都装好了 npm init vuelatest方式二 使用官方模板创建vue3项目 这种方式会基于模板创建项目,对于官方模板vu…

Rollup 基本概念及使用

Rollup是一款基于ESModule模块规范实现的JavaScript打包工具,在前端社区中赫赫有名,同时也在Vite的架构体系中发挥着重要作用。不仅是Vite生产环境下的打包工具,其插件机制也被Vite所兼容,可以说是Vite的构建基石。 接下来&#…

cesium entity与时间轴关联(添加运动轨迹)

1、先添加一个entity实体 用model加载一个飞机实体 let entity viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(120, 21),model: {uri: "/static/Cesium_Air.glb",minimumPixelSize: 128,maximumScale: 20000,},}) viewer.trackedEntity entity;…

LIN-报文结构

文章目录 协议规范一、字节场二、报文头(HEADER FIELDS)同步间隔(synchronisation break)同步场(SYNCH FIELD)标识符场(IDENTIFIER FIELD) 三、数据场(DATE FIELDS)四、校…

【负载均衡式在线OJ】 数据库

文章目录 41.使用Postman进行综合调试42.了解-前端预备52. 添加oj用户到MySQL53. 使用MySQL_Workbench创建表结构54. 测试录题功能55.重新设计oj_model56.编写oj_model具体代码57.MySQL综合测试58.结项与项目扩展思路 41.使用Postman进行综合调试 完善判题功能 先编译再测试 …

SpingBoot简介—helloworld

目录 一、使用idea创建第一个SpringBoot项目 二、Hello World 三、整体项目结构 一、使用idea创建第一个SpringBoot项目 在进行这一步时,可能会遇到问题,如下图所示: 在这里解决方法有以下四种: (1)方法1&…

国内AI大模型 VS chatgpt (20)-- H265/H264有何不同,h265有什么优势?

H265/H264有何不同,h265有什么优势? 文心一言: H.264和H.265是两种不同的视频编码标准,它们在压缩质量和带宽需求方面有所不同。 H.264是一种高效的视频压缩标准,它的编码单位是宏块(macroblock)&#…

XML配置方式整合SSM框架实现用户登录

文章目录 一,创建数据库与表(一)创建数据库(二)创建用户表(三)在用户表里插入记录 二,创建Maven项目三,项目添加相关依赖四,创建日志属性文件五,创…