hehung 发表于 2024-7-31 10:10

《嵌入式软件的时间分析》读书活动:10 第十章读书笔记-AUTOSAR

<p id="u55ca4c9a">该章节讲解了AUTOSAR架构的一些概念,主要是针对AUTOSAR的TIMEX做了介绍,说明了时间分析在AUTOSAR架构中的应用。</p>

<p id="u1c3d097b">TIMEX:AUTOSAR时间扩展,用于对运行时间需求做出详细描述。(目前较少项目使用)</p>

<p id="ua9bac486">ARTI:AUTOSAR运行时间接口,用于提升AUTOSAR模块和AUTOSARECU应用软件的追踪和调试。(目前还不成熟)</p>

<p id="u0970a3e6">目录如下:</p>

<pre>
<code>第10章 AUTOSAR 218
10.1 AUTOSAR CP 219
- 10.1.1 功能架构 219
- 10.1.2 软件架构、SW-C 定义和 VFB 219
- 10.1.3 RTE 220
- 10.1.4 实现、系统配置和 Runnable 221
10.2 AUTOSAR AP 221
- 10.2.1 功能架构 221
- 10.2.2 软件架构 AA 221
- 10.2.3 实现与系统配置 223
- 10.2.4 部署 224
- 10.2.5 执行管理和执行客户端 224
- 10.2.6 确定性执行和确定性客户端 224
- 10.2.7 POSIX调度 226
- 10.2.8 AUTOSARAP中的时间 227
10.3 AUTOSAR时间扩展TIMEX 229
- 10.3.1 目标 229
- 10.3.2 事件和事件链 229
- 10.3.3 TIMEX 要求类型 230
- 10.3.4 AUTOSAR/TIMEX 视角 230
10.4 AUTOSAR/ASAM 运行时间接口 ARTI 231
- 10.4.1 AUTOSAR ARTI 232
- 10.4.2 ASAM ARTI 233
10.5 技术报告“时间分析” 233
10.6 总结 234</code></pre>

<h1 data-lake-index-type="2" id="JDvMd">1. 基础概念</h1>

<p id="ub45e6ece">AUTOSAR CP:经典AUTOSAR,其标准侧重于实现实时操作系统的ECU。AUTOSAR OS 标准直接继承了OSEK/VDX标准。</p>

<p id="ua48c84f0">AUTOSAR AP:适用于高性能ECU,例如自动驾驶所需的ECU。</p>

<p id="u6e93da75">AUTOSAR FO(Soundation):所有通用要素,例如与方法有关的要素,均已转移到新建立的基础部分。</p>

<p id="u1b1383e6">AUTOSAR的信息通过arxml文件分发,因为项目中使用的arxml文件一般都很庞大,所以都会使用工具进行处理。</p>

<h1 data-lake-index-type="2" id="CA65F">2. AUTOSAR CP</h1>

<p id="u0729d715">SW-C通信方式:</p>

<ul>
        <li data-lake-index-type="0" id="ufd9ae7bc">发送器/接收器:发送器将数据发给一个或多个接收者,这属于单向通信。如果接收器需要响应,则还需要配置额外的通信信道。</li>
        <li data-lake-index-type="0" id="u83b0e47b">客户端/服务器:客户端向服务器请求服务,如请求提供数据。</li>
</ul>

<p id="ub8e74d0d">软件组件通过单个虚拟总线(虚拟功能总线,VFB)进行通信。</p>

<p id="u6d0f1be0">RTE(Rum-Time Environment):组织通信,RTE的一项基本任务是确保通信过程中的数据一致性。</p>

<p id="ub2c8b6e8">软件组件的实现通过 Runnable(通常是 void-void 函数,即没有参数、没有返回值的函数) 执行。Runnable 有特定的需求,比如&ldquo;必须每 10 ms 执行一次&rdquo;。</p>

<p id="u31e707ab">作者在本章节中只做了简单的说明,并没有详细介绍,详细的学习可以在网络上搜索,有很多相关的学习资料。</p>

<div style="text-align: center;"></div>

<h1 data-lake-index-type="2" id="DqE7K">3. AUTOSAR AP</h1>

<p id="udeca8cc2">功能将被分发到一个或多个自适应应用程序(Adaptive Applcation,AA)中。反过来说,即可以通过一个AA 来实现多个功能。(读后感:这句话感觉不是很对,前面说过功能被分配到一个或多个AA,后一句话又说一个AA实现多个功能,不对应)</p>

<p id="uccdaf5f9">自适应应用程序:每个AA都有自己的main函数。运行时POSIX操作系统将AA视为常规进程,一个AA会有一个或者多个线程。</p>

<p id="u9ead5fe1">实现与系统配置:</p>

<ul>
        <li data-lake-index-type="0" id="u8c9e1277">执行清单(Execution Manifest): 每个 AA 都需要,描述了对于应用程序执行的要求以及与其他AA的依赖关系。</li>
        <li data-lake-index-type="0" id="u9aa1475f">服务例程清单(Service Instance Manifest):描述了 AA 使用的服务。</li>
        <li data-lake-index-type="0" id="u061357fd">机器清单(Machine Manifest)。所有与不依赖 AA 的执行环境(具体的硬件虚拟机或容器)相关的信息均记录在机器清单中。</li>
</ul>

<p id="ud349d288">部署:与AUTOSAR CP的部署不同,AUTOSAR AP将软件分发到ECU可以在运行时实现。软件更新和配置管理负责在运行时将AA纳入系统内。</p>

<p id="u6421d505">执行管理和执行客户端:调用参数kRunning标志着 AA 执行阶段(&ldquo;运行&rdquo;状态)的开始,而调用参数kTerminating 则标志着执行阶段的结束。这两个语句均将通知执行管理组件应用程序的后续状态。</p>

<p id="u8025f55b">确定性执行和确定性客户端:</p>

<ul>
        <li data-lake-index-type="0" id="uf1114e0f">冗余执行:可以再并行执行一次与安全相关的过程,这被称为冗余执行。</li>
        <li data-lake-index-type="0" id="u1bd7596e">定期执行:定期执行可能与预期有所不同。首先,确定性客户端要求 AA 符合预期的状态模型。</li>
</ul>

<ul>
        <li>
        <ul ne-level="1">
                <li data-lake-index-type="0" id="ua83fd0f0">注册服务(Register Services)-kRegisterservices:应用程序注册其通信服务,即告诉系统其将提供哪些通信服务。</li>
                <li data-lake-index-type="0" id="ua3657bb2">服务发现(Service Discovery)-kServiceDiscovery:应用程序确定其将可以使用哪些服务。</li>
                <li data-lake-index-type="0" id="ub22f4b4b">初始化(Init)-kInit:应用程序初始化自身及其数据。</li>
                <li data-lake-index-type="0" id="ued4ebd04">运行(Run)-kRun:应用程序执行一次常规代码循环。这是周期性执行的代码所处的唯一状态,所有其他状态均被视为&ldquo;特殊情况&rdquo;。</li>
                <li data-lake-index-type="0" id="uc58d2d0f">终止(Terminate)-kTerminate:应用程序正在准备终止。</li>
        </ul>
        </li>
</ul>

<p id="uc201e600">作者在本章节中只做了简单的说明,并没有详细介绍,详细的学习可以在网络上搜索,有很多相关的学习资料。</p>

<div style="text-align: center;"></div>

<h2 data-lake-index-type="2" id="PJAtZ">3.1. AUTOSAR AP中的时间</h2>

<p id="u2fa1f4e6">确定性客户端的时间参数:</p>

<ul>
        <li data-lake-index-type="0" id="u6c46aac4">PER-PERiod,周期:指连续两次激活相同类型循环的时间差。</li>
        <li data-lake-index-type="0" id="u98deac2d">DT-Deta Time,时间差:指一个实例开始到下一个相同循环类型的实例开始的间隔时间。</li>
        <li data-lake-index-type="0" id="u8f4dfb85">JIT-Jitter,抖动:描述了实际周期时间与期望周期时间之间的偏差。</li>
        <li data-lake-index-type="0" id="ud2c50eae">J-Absolute Jitter,绝对抖动:指事件的标准时间与实际时间的关系。</li>
        <li data-lake-index-type="0" id="u605c86cf">IPT-Initial Pending Time,初始挂起时间:循环等待开始的时间,即从激活到开始执行的时间差,更准确地说,是指从&ldquo;激活&rdquo;事件到 DeterministicClient.WaitForNextActivation()的调用返回结果的时间差。</li>
        <li data-lake-index-type="0" id="u96a734ef">RT-Response Time,响应时间:从&ldquo;激活&rdquo;到相应循环体结束(即调用DeterministicClient.WaitForNextActivation())所经过的时间。</li>
        <li data-lake-index-type="0" id="u4ff0938b">DL-DeadLine,截止时间:指允许的最大响应时间。</li>
        <li data-lake-index-type="0" id="u985cbed8">ST-Slack Time,间隔空闲时间,即剩余时间:指一次循环结束到相同循环类型的下一个循环体&ldquo;激活&rdquo;的时间&ldquo;间隙&rdquo;。</li>
        <li data-lake-index-type="0" id="u74961f4f">NST-Net Slack Time,净间隔空闲时间:用间隔空闲时间减去间隔空闲时间内属于其他类型环的所有 GET,即可计算出净间隔空闲时间。</li>
        <li data-lake-index-type="0" id="u6a94d1b1">GET-Gross Execution Time,总执行时间,即总运行时间:一次循环的开始时间与结束时间(即从 DeterministicClient.waitForNextActivation()函数返回结果到其再次被调用)的时间差即是总运行时间。</li>
        <li data-lake-index-type="0" id="u29e37fdd">CET-Core Execution Time,核心执行时间,即纯运行时间:由于一个进程可以启动多个线程,并且可以在同一处理器的不同CPU 上同时执行这些线程,因此必须将所有线程的运行时相加。此计算方式的依据是POSIX 提供的 RUNT 时间。</li>
</ul>

<div style="text-align: center;"></div>

<h1 data-lake-index-type="2" id="W4T8q">4. AUTOSAR时间扩展TIMEX</h1>

<p id="ub0e22f20">在AUTOSAR4.0版本中引入。(目前还没有工具可以实现对TIMEX的arxml的管理)</p>

<p id="ufeb2ec93">目标:可以为系统的配置提供支持,以便配置决策能够充分地服务于时间需求。可以验证是否时间需求是否得到了满足。</p>

<p id="u650ea380">事件和事件链:时间需求基本上可应用于事件和事件链。这些事件均为具有唯一标识的AUTOSAR 事件。事件链是指由两个或多个事件构成的链。</p>

<p id="u7b9bb924">TIMEX要求类型:</p>

<ul>
        <li data-lake-index-type="0" id="ub6bdd7af">EventTriggeringConstraint 典型用例:监测周期性事件的抖动。</li>
        <li data-lake-index-type="0" id="u0e24dc69">LatencyTimingConstraint 典型用例:避免由于不同步或发送器/接收器同步不良造成重复按收数据或数据丢失。</li>
        <li data-lake-index-type="0" id="u3f5bf578">AgeConstraint 典型用例:确保数据不会太旧。</li>
        <li data-lake-index-type="0" id="u05a2d8ca">SynchronizationTimingConstraint 典型用例:同步子系统以避免竞态条件。</li>
        <li data-lake-index-type="0" id="u54542027">OffsetTimingConstraint 典型用例:监测两个事件之间的预期时间偏移。</li>
        <li data-lake-index-type="0" id="u077ff048">ExecutionOrderConstraint 典型用例:监测处理Runnable 时的预期序列。</li>
        <li data-lake-index-type="0" id="u7c317ebf">ExccutionTimeConstraint 典型用例:监测允许的最大 CET,例如 Runnable 的允许的最大CET。</li>
</ul>

<p id="uef08a00c">AUTOSAR/TIMEX视角:</p>

<ul>
        <li data-lake-index-type="0" id="u493cf728">VfbTiming:AUTOSAR软件组件(SW-C)通过虚拟功能总线(VFB)交互树的时间。</li>
        <li data-lake-index-type="0" id="u3b655609">SwcTiming:软件组件的内部时间。</li>
        <li data-lake-index-type="0" id="u8d04ce5b">SyetemTiming:控制单元的时间。</li>
        <li data-lake-index-type="0" id="u21399e68">BswModuleTiming:基础软件模块(BSW)的内部时间(与SwcTiming 类似)。</li>
        <li data-lake-index-type="0" id="u8ac271ea">BswCompositionTiming:多个基础软件模块交互时的时间。</li>
        <li data-lake-index-type="0" id="u87d8eefd">EcuTimmig:配置完整的控制单元的时间。所有软件组件和某础软件模块的交互均在此完整配置中进行了明确定义。</li>
</ul>

<h1 data-lake-index-type="2" id="rfNFY">5. AUTOSAR/ASAM 运行时间接口 ARTI</h1>

<p id="uccaecb46">于2016年发布,旨在大幅简化 AUTOSAR 项目的时间分析。</p>

<div style="text-align: center;"></div>

<p id="u9ac39d74">AUTOSAR ARTI 的任务是在V-Model的左侧建立先决条件,便于以后可以进行运行时间测量并在右侧记录追踪图表。</p>

<div style="text-align: center;"></div>

<h1 data-lake-index-type="2" id="ZvZrc">6. 总结</h1>

<p id="u956eb618">本章概述了AUTOSAR中与时间相关的标准和工作组。大多都是概念的讲解,对于初学者肯定不容易理解,更深入的理解需要查找更详细的学习资料。</p>

<p id="u6d61d7d8">TIMEX的概念虽然很早就提出来了,但是目前还没有得到广泛使用。AUTOSARARTI与TIMEX相比还不成熟。ASAM ARTI还将大幅简化时间分析工具之间的数据交换过程。</p>

<p id="u7f753fa6">&nbsp;</p>
页: [1]
查看完整版本: 《嵌入式软件的时间分析》读书活动:10 第十章读书笔记-AUTOSAR