新增 AUTOSAR 4.4 P0 阶段中文翻译(22 篇文档)
翻译阶段:P0 · 基础(已完成) 模块: - P0_General(9 篇):分层架构、VFB、AI 用户指南、SWC 建模指南等 - P0_BSWGeneral(13 篇):标准类型、平台类型、编译器抽象、SRS/SWS 通用规范、错误处理等 翻译统计: - 已翻译:22 篇(约 1226 页) - 已校对:22 篇(L1 自动校对 100%) - 总进度:22 / 216(10.2%) 输出结构: - index.html(主索引) - glossary.html(术语表) - progress.md / _progress.json(进度) - P0_General/index.html + 9 篇翻译 - P0_BSWGeneral/index.html + 13 篇翻译 - assets/style.css(样式) - logs/proofread_log.jsonl(校对日志) 翻译约定: - 中文为主 + 英文括注(首次出现) - 需求 ID(RS_*/SWS_*/SRS_*)保留 - API、宏、类型名保留英文 - 章节结构完整对应 - 每篇文档底部附带校对记录 Co-Authored-By: opencode translator <noreply@autosar.local>
This commit is contained in:
co-authored by
opencode translator
parent
bf21120e94
commit
21013b95f2
@@ -0,0 +1,569 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>应用层错误处理说明 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>应用层错误处理说明(Explanation of Error Handling on Application Level)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:378</span>
|
||||
<span>🏷 类型:EXP(说明文档)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:78</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_EXP_ApplicationLevelErrorHandling.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍</a></li>
|
||||
<li><a href="#s2">2 与其他文档的关系</a></li>
|
||||
<li><a href="#s3">3 参考资料</a></li>
|
||||
<li><a href="#s4">4 文档导读</a></li>
|
||||
<li><a href="#s5">5 术语与定义</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 基本可靠性术语</a></li>
|
||||
<li><a href="#s5_2">5.2 故障检测、隔离与恢复(FDIR)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 范围</a></li>
|
||||
<li><a href="#s7">7 错误模型</a></li>
|
||||
<li><a href="#s8">8 错误处理机制</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1">8.1 合理性检查(Plausibility checks)</a></li>
|
||||
<li><a href="#s8_2">8.2 替代值(Substitute Values)</a></li>
|
||||
<li><a href="#s8_3">8.3 投票(Voting)</a></li>
|
||||
<li><a href="#s8_4">8.4 一致性(Agreement)</a></li>
|
||||
<li><a href="#s8_5">8.5 校验和/校验码(Checksums/Codes)</a></li>
|
||||
<li><a href="#s8_6">8.6 执行序列监控(Execution sequence monitoring)</a></li>
|
||||
<li><a href="#s8_7">8.7 活性监控(Aliveness monitoring)</a></li>
|
||||
<li><a href="#s8_8">8.8 状态与模式管理(Status and Mode Management)</a></li>
|
||||
<li><a href="#s8_9">8.9 重配置(Reconfiguration)</a></li>
|
||||
<li><a href="#s8_10">8.10 复位(Reset)</a></li>
|
||||
<li><a href="#s8_11">8.11 错误过滤(Error Filtering)</a></li>
|
||||
<li><a href="#s8_12">8.12 内存保护(Memory Protection)</a></li>
|
||||
<li><a href="#s8_13">8.13 时间保护(Timing Protection)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s9">9 方面映射</a>
|
||||
<ul>
|
||||
<li><a href="#s9_1">9.1 映射到 FDIR 过程和错误模型</a></li>
|
||||
<li><a href="#s9_2">9.2 映射到实现层级</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s10">10 终止与重启分区</a>
|
||||
<ul>
|
||||
<li><a href="#s10_1">10.1 介绍</a></li>
|
||||
<li><a href="#s10_2">10.2 基本原理 – 用例</a></li>
|
||||
<li><a href="#s10_3">10.3 终止与重启分区的方法</a></li>
|
||||
<li><a href="#s10_4">10.4 集成商责任</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍(Introduction)</h2>
|
||||
<p>本文档的目的和目标是<strong>综述汽车行业中常用且可在 AUTOSAR 中使用的应用层错误处理机制</strong>。这包括应用层的错误处理以及应用层错误的处理。</p>
|
||||
<p>此处的"错误处理"指完整的处理链,即<strong>检测、隔离/识别与恢复</strong>。本文档展示了一组对汽车系统有用的错误处理机制,涵盖错误处理的三个阶段。每个机制首先以高级方式进行描述,包括其在错误处理中的适用性和技术方面。然后,回顾与该机制相关的 AUTOSAR 功能,并详细说明该机制在 AUTOSAR 系统中的哪个位置实现或支持。因此,机制列表既包含 AUTOSAR 全部(或部分)提供的机制,也包含在纳入系统时<strong>应当</strong>由应用开发者在 SW-C 级别实现的机制。</p>
|
||||
<p><strong>注意</strong>:所涵盖的机制并不完整,仅限于可以在基于 AUTOSAR 4.0 版本构建的系统上实现的机制。可以存在替代和额外的机制,AUTOSAR 的未来版本可能支持更多错误处理功能。此外,本文档<strong>不强制使用任何机制</strong>——决策当然完全取决于应用开发者和集成商。</p>
|
||||
<p>本文档旨在描述可能的机制,主要面向应用/SW-C 开发者。然而,对于 BSW 模块开发者也可能有用。关注点是<strong>随机故障</strong>,而非系统性设计故障(如 SW bug)。此类故障的示例包括影响应用、通信或外围设备的硬件故障。本文聚焦于最适合由 SW-C 处理的错误,<strong>不涵盖 RTE 内或 RTE 以下的错误处理</strong>,例如 COM 和 OS 的错误处理。</p>
|
||||
|
||||
<h2 id="s2">2 与其他文档的关系(Relation to other documents)</h2>
|
||||
<p>本文档与 AUTOSAR 发布的许多其他文档相关,尤其是由 AUTOSAR 功能安全团队处理的文档。本文档的目的不是替代这些文档中的任何一个,而是<strong>从应用开发者的视角</strong>审视其他工作包已完成的工作。</p>
|
||||
<p>因此,本文档与其他文档之间存在相当数量的重叠,这表明 AUTOSAR 内已达到的成熟度。</p>
|
||||
<p>针对每个机制,列出了相关的 AUTOSAR 文档清单,作为本文档与其他 AUTOSAR 文档之间的<strong>显式关系</strong>。</p>
|
||||
<blockquote>
|
||||
<strong>关于功能安全机制和措施的信息分布在整个 AUTOSAR 规范文档中</strong>。除非知道功能安全机制是如何被支持的以及必要信息的具体位置,否则难以评估如何使用 AUTOSAR 高效地实现安全相关系统。
|
||||
AUTOSAR 文档《AUTOSAR 中功能安全措施概述》总结了 AUTOSAR 中功能安全相关的关键点,解释了功能安全机制和措施的使用方式,并参考了相应文档。此外,它有助于建立 ISO 26262 要求与 AUTOSAR 措施和机制之间的映射。
|
||||
</blockquote>
|
||||
|
||||
<h2 id="s3">3 参考资料(References)</h2>
|
||||
<p>本文档引用了 AUTOSAR 4.0 规范中的多个标准文档,包括:</p>
|
||||
<ul>
|
||||
<li>软件组件模板(Software Component Template)</li>
|
||||
<li>RTE 规范(Specification of RTE)</li>
|
||||
<li>操作系统规范(Specification of Operating System)</li>
|
||||
<li>通信规范(Specification of Communication)</li>
|
||||
<li>通信管理器规范(Specification of Communication Manager)</li>
|
||||
<li>诊断通信管理器规范(Specification of Diagnostic Communication Manager)</li>
|
||||
<li>ECU 状态管理器规范(Specification of ECU State Manager)</li>
|
||||
<li>诊断事件管理器规范(Specification of Diagnostic Event Manager)</li>
|
||||
<li>基础软件模式管理器规范(Specification of BSW Mode Manager)</li>
|
||||
<li>以及更多</li>
|
||||
</ul>
|
||||
<p>完整引用清单见原文第 9–11 页。</p>
|
||||
|
||||
<h2 id="s4">4 文档导读(Guide to the document)</h2>
|
||||
<p>本文档按以下方式组织:</p>
|
||||
<ul>
|
||||
<li>第 5 章 定义关键术语,包括基本可靠性术语和 FDIR 概念。</li>
|
||||
<li>第 6 章 描述本文档的范围。</li>
|
||||
<li>第 7 章 介绍错误模型。</li>
|
||||
<li>第 8 章 是核心内容,详细描述 13 种错误处理机制(8.1–8.13),每种机制包括:描述、适用性、应用层 vs BSW 的对比、AUTOSAR 参考。</li>
|
||||
<li>第 9 章 将所有机制映射到 FDIR 过程、错误模型和实现层级。</li>
|
||||
<li>第 10 章 详细描述分区终止与重启机制。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s5">5 术语与定义(Terms and definitions)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 基本可靠性术语(Basic dependability terms)</h3>
|
||||
<table>
|
||||
<thead><tr><th>中文</th><th>英文</th><th>定义</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>故障</td><td>Fault</td><td>系统组件的异常状态,可能导致错误。</td></tr>
|
||||
<tr><td>错误</td><td>Error</td><td>系统状态的不正确,可能导致失效。</td></tr>
|
||||
<tr><td>失效</td><td>Failure</td><td>系统偏离其规定功能。</td></tr>
|
||||
<tr><td>永久故障</td><td>Permanent Fault</td><td>持续存在的故障,直到被修复。</td></tr>
|
||||
<tr><td>瞬态故障</td><td>Transient Fault</td><td>短暂出现的故障,随后消失。</td></tr>
|
||||
<tr><td>间歇故障</td><td>Intermittent Fault</td><td>间歇性出现的故障。</td></tr>
|
||||
<tr><td>可靠性</td><td>Dependability</td><td>系统可被信赖的属性,包括可用性、可靠性、安全性、机密性、完整性、可维护性等。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s5_2">5.2 故障检测、隔离与恢复(FDIR)(Fault Detection, Isolation and Recovery)</h3>
|
||||
<p>FDIR 是错误处理的<strong>三阶段过程</strong>:</p>
|
||||
<ol>
|
||||
<li><strong>故障检测(Detection)</strong>:识别故障的发生;</li>
|
||||
<li><strong>故障隔离(Isolation)</strong>:定位故障源;</li>
|
||||
<li><strong>故障恢复(Recovery)</strong>:将系统恢复到正常状态。</li>
|
||||
</ol>
|
||||
<p>三种恢复策略:</p>
|
||||
<ul>
|
||||
<li><strong>前向恢复(Forward Recovery)</strong>:在故障状态下继续运行,使用替代值或重新配置;</li>
|
||||
<li><strong>后向恢复(Backward Recovery)</strong>:回滚到之前的已知良好状态;</li>
|
||||
<li><strong>重启(Restart)</strong>:重启系统或部分系统。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s6">6 范围(Scope)</h2>
|
||||
<p>本文档的<strong>范围</strong>:</p>
|
||||
<ul>
|
||||
<li><strong>包含</strong>:SW-C 级别的错误处理机制,以及部分由 AUTOSAR BSW 支持的机制。</li>
|
||||
<li><strong>不包含</strong>:RTE 之内的错误处理(如 COM、OS 错误处理);系统性设计故障(SW bug);硬件设计故障。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s7">7 错误模型(Error model)</h2>
|
||||
<p>AUTOSAR 错误模型区分以下<strong>错误类别</strong>:</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>错误类型</th><th>英文</th><th>说明</th><th>处理位置</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>开发错误</td><td>Development Error</td><td>开发阶段发现的问题(如参数错误、状态错误)</td><td>Det(默认错误追踪器)</td></tr>
|
||||
<tr><td>运行时错误</td><td>Runtime Error</td><td>运行时发生的错误(如除零、溢出)</td><td>Det</td></tr>
|
||||
<tr><td>瞬态故障</td><td>Transient Fault</td><td>短暂出现的故障</td><td>Dem(诊断事件管理器)</td></tr>
|
||||
<tr><td>生产错误</td><td>Production Error</td><td>生产环境(量产)下发生的错误</td><td>Dem</td></tr>
|
||||
<tr><td>扩展生产错误</td><td>Extended Production Error</td><td>带有额外信息的生产错误</td><td>Dem</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>错误<strong>传播路径</strong>:</p>
|
||||
<ol>
|
||||
<li>错误源(BSW 或 SW-C)通过 API 返回值或回调通知检测到错误;</li>
|
||||
<li>调用者根据错误类型决定处理(继续、降级、复位);</li>
|
||||
<li>严重错误通过 DEM 上报,由诊断机制处理。</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="s8">8 错误处理机制(Error handling mechanisms)</h2>
|
||||
|
||||
<h3 id="s8_1">8.1 合理性检查(Plausibility checks)</h3>
|
||||
|
||||
<h4 id="s8_1_1">8.1.1 描述(Description)</h4>
|
||||
<p>合理性检查通过<strong>范围检查</strong>、<strong>关系检查</strong>或<strong>逻辑检查</strong>验证输入/输出数据是否在合理范围内。</p>
|
||||
<p><strong>示例</strong>:</p>
|
||||
<ul>
|
||||
<li>传感器读数是否在物理可能范围内(如温度 -40°C 至 +125°C);</li>
|
||||
<li>两个相关传感器的读数是否符合物理关系;</li>
|
||||
<li>状态变量是否进入非法状态。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_1_2">8.1.2 适用性(Applicability)</h4>
|
||||
<p>适用场景:</p>
|
||||
<ul>
|
||||
<li>几乎所有安全相关系统都需要某种形式的合理性检查;</li>
|
||||
<li>特别适用于检测因传感器故障、信号干扰等引起的输入异常。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_1_3">8.1.3 应用层 vs. BSW(Application level vs. BSW)</h4>
|
||||
<p>BSW 层可执行<strong>基础合理性检查</strong>(如参数范围)。<strong>应用特定的合理性检查</strong>应在 SW-C 层实现,因为只有应用层知道数据的语义。</p>
|
||||
|
||||
<h4 id="s8_1_4">8.1.4 AUTOSAR 参考(AUTOSAR References)</h4>
|
||||
<p>主要参考 <code>AUTOSAR_EXP_ErrorDescription.pdf</code>。</p>
|
||||
|
||||
<h3 id="s8_2">8.2 替代值(Substitute Values)</h3>
|
||||
|
||||
<h4 id="s8_2_1">8.2.1 描述</h4>
|
||||
<p>当检测到错误时,使用<strong>预定义的合理替代值</strong>代替错误值,继续系统运行。</p>
|
||||
<p><strong>示例</strong>:</p>
|
||||
<ul>
|
||||
<li>传感器失效时,使用上一次的有效值;</li>
|
||||
<li>使用默认值(如温度 25°C)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_2_2">8.2.2 适用性</h4>
|
||||
<p>适用场景:</p>
|
||||
<ul>
|
||||
<li>需要维持基本功能的关键系统;</li>
|
||||
<li>错误为瞬态时特别有用。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_2_3">8.2.3 应用层 vs. BSW</h4>
|
||||
<p>应用层提供替代值;BSW 提供默认值定义机制。</p>
|
||||
|
||||
<h4 id="s8_2_4">8.2.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_SWS_DefaultErrorTracer.pdf</code>。</p>
|
||||
|
||||
<h3 id="s8_3">8.3 投票(Voting)</h3>
|
||||
|
||||
<h4 id="s8_3_1">8.3.1 描述</h4>
|
||||
<p><strong>投票</strong>机制通过比较<strong>多个独立源</strong>(例如多个传感器)的结果来确定"正确答案"。例如:</p>
|
||||
<ul>
|
||||
<li><strong>2-out-of-3 投票</strong>:3 个传感器中至少 2 个一致即采用;</li>
|
||||
<li><strong>中值选择</strong>:取中值而非平均值。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_3_2">8.3.2 适用性</h4>
|
||||
<p>适用于安全关键系统,特别是涉及<strong>物理量测量</strong>的场景(如制动、转向)。</p>
|
||||
|
||||
<h4 id="s8_3_3">8.8.3 应用层 vs. BSW</h4>
|
||||
<p>通常在 SW-C 层实现;BSW 提供冗余通信机制。</p>
|
||||
|
||||
<h4 id="s8_3_4">8.3.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 RTE 规范和 SW-C 模板。</p>
|
||||
|
||||
<h3 id="s8_4">8.4 一致性(Agreement)</h3>
|
||||
|
||||
<h4 id="s8_4_1">8.4.1 描述</h4>
|
||||
<p><strong>一致性检查</strong>用于验证分布式系统中多个节点<strong>对同一事实的认知</strong>是否一致。例如:</p>
|
||||
<ul>
|
||||
<li>两个 ECU 对车速的估计差异应在一定范围内;</li>
|
||||
<li>多源信号融合时的一致性校验。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_4_2">8.4.2 适用性</h4>
|
||||
<p>适用于分布式功能(如 V2X、协同驾驶)。</p>
|
||||
|
||||
<h4 id="s8_4_3">8.4.3 应用层 vs. BSW</h4>
|
||||
<p>应用层使用一致的信息进行决策。</p>
|
||||
|
||||
<h4 id="s8_4_4">8.4.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_TPS_SoftwareComponentTemplate</code>。</p>
|
||||
|
||||
<h3 id="s8_5">8.5 校验和/校验码(Checksums/Codes)</h3>
|
||||
|
||||
<h4 id="s8_5_1">8.5.1 描述</h4>
|
||||
<p><strong>校验和</strong>用于检测数据在传输或存储过程中的损坏:</p>
|
||||
<ul>
|
||||
<li>CRC(循环冗余校验);</li>
|
||||
<li>校验和(Checksum);</li>
|
||||
<li>哈希(Hash);</li>
|
||||
<li>MAC(消息认证码)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_5_2">8.8.2 适用性</h4>
|
||||
<p>适用于所有关键数据的存储和传输。</p>
|
||||
|
||||
<h4 id="s8_5_3">8.5.3 应用层 vs. BSW</h4>
|
||||
<p>BSW 层提供 CRC 库(<code>AUTOSAR_SWS_CRCLibrary</code>),应用层决定何时使用。</p>
|
||||
|
||||
<h4 id="s8_5_4">8.5.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 CRC 库规范、E2E 库规范。</p>
|
||||
|
||||
<h3 id="s8_6">8.6 执行序列监控(Execution sequence monitoring)</h3>
|
||||
|
||||
<h4 id="s8_6_1">8.6.1 描述</h4>
|
||||
<p>监控代码的<strong>执行顺序</strong>是否正确。例如:</p>
|
||||
<ul>
|
||||
<li>状态机在进入某状态前是否经过合法的转换;</li>
|
||||
<li>初始化序列是否按预期顺序执行。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_6_2">8.6.2 适用性</h4>
|
||||
<p>适用于复杂控制逻辑和状态机实现。</p>
|
||||
|
||||
<h4 id="s8_6_3">8.6.3 应用层 vs. BSW</h4>
|
||||
<p>应用层在 SW-C 中实现。</p>
|
||||
|
||||
<h4 id="s8_6_4">8.6.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 RTE 和 SW-C 模板。</p>
|
||||
|
||||
<h3 id="s8_7">8.7 活性监控(Aliveness monitoring)</h3>
|
||||
|
||||
<h4 id="s8_7_1">8.7.1 描述</h4>
|
||||
<p><strong>活性监控</strong>验证监控对象(任务、SW-C、ECU)是否<strong>按预期频率报告存活</strong>。如果未在规定时间内报告,则认为该对象发生故障。</p>
|
||||
<p>AUTOSAR 中通过 WdgM(看门狗管理器)实现。</p>
|
||||
|
||||
<h4 id="s8_7_2">8.7.2 适用性</h4>
|
||||
<p>几乎所有安全相关 ECU 都需要活性监控。</p>
|
||||
|
||||
<h4 id="s8_7_3">8.7.3 应用层 vs. BSW</h4>
|
||||
<p>WdgM 是 BSW 模块;SW-C 通过 <code>WdgM_CheckpointReached()</code> 报告活性。</p>
|
||||
|
||||
<h4 id="s8_7_4">8.7.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_SWS_WatchdogManager.pdf</code>。</p>
|
||||
|
||||
<h3 id="s8_8">8.8 状态与模式管理(Status and Mode Management)</h3>
|
||||
|
||||
<h4 id="s8_8_1">8.8.1 描述</h4>
|
||||
<p>通过<strong>统一的状态机</strong>管理 ECU 各子系统的运行模式:</p>
|
||||
<ul>
|
||||
<li>BswM:基础软件模式管理;</li>
|
||||
<li>EcuM:ECU 状态管理;</li>
|
||||
<li>ComM:通信模式管理;</li>
|
||||
<li>应用层模式管理(用户自定义)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_8_2">8.8.2 适用性</h4>
|
||||
<p>所有 ECU 都需要状态与模式管理。</p>
|
||||
|
||||
<h4 id="s8_8_3">8.8.3 应用层 vs. BSW</h4>
|
||||
<p>BswM、EcuM、ComM 是 BSW;应用层模式由 SW-C 实现。</p>
|
||||
|
||||
<h4 id="s8_8_4">8.8.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 BswM、EcuM、ComM 规范。</p>
|
||||
|
||||
<h3 id="s8_9">8.9 重配置(Reconfiguration)</h3>
|
||||
|
||||
<h4 id="s8_9_1">8.9.1 描述</h4>
|
||||
<p>在运行时<strong>重新配置</strong>系统参数或软件组件,以适应故障状态或工作模式变化。</p>
|
||||
<p>示例:</p>
|
||||
<ul>
|
||||
<li>切换到降级运行模式;</li>
|
||||
<li>禁用故障模块,使用备份。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_9_2">8.9.2 适用性</h4>
|
||||
<p>适用于需要在故障后调整行为的系统。</p>
|
||||
|
||||
<h4 id="s8_9_3">8.9.3 应用层 vs. BSW</h4>
|
||||
<p>BSW 提供配置切换机制;具体策略由应用层决定。</p>
|
||||
|
||||
<h4 id="s8_9_4">8.9.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 EcuM、BswM 规范。</p>
|
||||
|
||||
<h3 id="s8_10">8.10 复位(Reset)</h3>
|
||||
|
||||
<h4 id="s8_10_1">8.10.1 描述</h4>
|
||||
<p>当其他恢复策略失败时,执行<strong>复位</strong>。复位类型包括:</p>
|
||||
<ul>
|
||||
<li>ECU 复位;</li>
|
||||
<li>分区复位(OS-Application 终止并重启);</li>
|
||||
<li>部分模块重启。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_10_2">8.10.2 适用性</h4>
|
||||
<p>适用于无法通过其他方式恢复的严重故障。</p>
|
||||
|
||||
<h4 id="s8_10_3">8.8.3 应用层 vs. BSW</h4>
|
||||
<p>EcuM 管理复位;SW-C 可请求复位。</p>
|
||||
|
||||
<h4 id="s8_10_4">8.10.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_SWS_ECUStateManager.pdf</code>。</p>
|
||||
|
||||
<h3 id="s8_11">8.11 错误过滤(Error Filtering)</h3>
|
||||
|
||||
<h4 id="s8_11_1">8.11.1 描述</h4>
|
||||
<p>通过<strong>过滤机制</strong>避免错误洪流(error storm),例如:</p>
|
||||
<ul>
|
||||
<li>仅在规定时间间隔内上报同一错误;</li>
|
||||
<li>仅在错误首次发生时上报。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_11_2">8.11.2 适用性</h4>
|
||||
<p>所有使用 Dem 的系统。</p>
|
||||
|
||||
<h4 id="s8_11_3">8.11.3 应用层 vs. BSW</h4>
|
||||
<p>Dem 实现过滤;SW-C 可通过 API 配置。</p>
|
||||
|
||||
<h4 id="s8_11_4">8.11.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_SWS_DiagnosticEventManager.pdf</code>。</p>
|
||||
|
||||
<h3 id="s8_12">8.12 内存保护(Memory Protection)</h3>
|
||||
|
||||
<h4 id="s8_12_1">8.12.1 描述</h4>
|
||||
<p>通过<strong>内存保护</strong>机制防止分区之间相互干扰(freedom from interference):</p>
|
||||
<ul>
|
||||
<li>OS-Application 的内存隔离;</li>
|
||||
<li>MPU(内存保护单元)配置;</li>
|
||||
<li>栈隔离。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_12_2">8.12.2 适用性</h4>
|
||||
<p>所有多分区 ECU 都应启用内存保护。</p>
|
||||
|
||||
<h4 id="s8_12_3">8.12.3 应用层 vs. BSW</h4>
|
||||
<p>OS 和 Memory Mapping 提供内存保护,应用层不直接涉及。</p>
|
||||
|
||||
<h4 id="s8_12_4">8.12.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 OS 规范和 Memory Mapping 规范。</p>
|
||||
|
||||
<h3 id="s8_13">8.13 时间保护(Timing Protection)</h3>
|
||||
|
||||
<h4 id="s8_13_1">8.13.1 描述</h4>
|
||||
<p>通过<strong>时间保护</strong>机制检测:</p>
|
||||
<ul>
|
||||
<li>任务执行时间超出预算;</li>
|
||||
<li>中断锁定时间过长;</li>
|
||||
<li>资源占用时间过长。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s8_13_2">8.13.2 适用性</h4>
|
||||
<p>所有 ASIL 等级 ECU 都应启用时间保护。</p>
|
||||
|
||||
<h4 id="s8_13_3">8.13.3 应用层 vs. BSW</h4>
|
||||
<p>OS 提供时间保护,应用层无需直接涉及。</p>
|
||||
|
||||
<h4 id="s8_13_4">8.13.4 AUTOSAR 参考</h4>
|
||||
<p>主要参考 <code>AUTOSAR_SWS_OS.pdf</code>。</p>
|
||||
|
||||
<h2 id="s9">9 方面映射(Aspect mapping)</h2>
|
||||
|
||||
<h3 id="s9_1">9.1 映射到 FDIR 过程和错误模型(Mapping to FDIR process and Error Model)</h3>
|
||||
<p>每种错误处理机制与 FDIR 阶段和错误模型的对应关系:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>机制</th><th>检测</th><th>隔离</th><th>恢复</th><th>错误模型</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>合理性检查</td><td>✓</td><td>部分</td><td>—</td><td>开发/运行时</td></tr>
|
||||
<tr><td>替代值</td><td>—</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>投票</td><td>✓</td><td>✓</td><td>✓</td><td>瞬态/永久</td></tr>
|
||||
<tr><td>一致性</td><td>✓</td><td>✓</td><td>—</td><td>永久</td></tr>
|
||||
<tr><td>校验和</td><td>✓</td><td>—</td><td>—</td><td>瞬态/永久</td></tr>
|
||||
<tr><td>执行序列</td><td>✓</td><td>—</td><td>—</td><td>开发</td></tr>
|
||||
<tr><td>活性监控</td><td>✓</td><td>部分</td><td>—</td><td>永久</td></tr>
|
||||
<tr><td>状态/模式管理</td><td>—</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>重配置</td><td>—</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>复位</td><td>—</td><td>—</td><td>✓</td><td>永久</td></tr>
|
||||
<tr><td>错误过滤</td><td>—</td><td>—</td><td>—</td><td>—</td></tr>
|
||||
<tr><td>内存保护</td><td>✓</td><td>✓</td><td>✓</td><td>永久</td></tr>
|
||||
<tr><td>时间保护</td><td>✓</td><td>—</td><td>✓</td><td>永久</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s9_2">9.2 映射到实现层级(Mapping to implementation level)</h3>
|
||||
<p>每种机制在不同 AUTOSAR 层的实现位置:</p>
|
||||
<table>
|
||||
<thead><tr><th>机制</th><th>SW-C</th><th>RTE</th><th>BSW</th><th>OS</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>合理性检查</td><td>✓</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>替代值</td><td>✓</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>投票</td><td>✓</td><td>部分</td><td>—</td><td>—</td></tr>
|
||||
<tr><td>校验和</td><td>✓</td><td>—</td><td>✓</td><td>—</td></tr>
|
||||
<tr><td>活性监控</td><td>—</td><td>✓</td><td>✓(WdgM)</td><td>—</td></tr>
|
||||
<tr><td>状态/模式管理</td><td>✓</td><td>—</td><td>✓(BswM、EcuM)</td><td>—</td></tr>
|
||||
<tr><td>复位</td><td>—</td><td>—</td><td>✓(EcuM)</td><td>✓</td></tr>
|
||||
<tr><td>内存保护</td><td>—</td><td>—</td><td>✓</td><td>✓</td></tr>
|
||||
<tr><td>时间保护</td><td>—</td><td>—</td><td>—</td><td>✓</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s10">10 终止与重启分区(Terminating and restarting partitions)</h2>
|
||||
|
||||
<h3 id="s10_1">10.1 介绍(Introduction)</h3>
|
||||
|
||||
<h4 id="s10_1_1">10.1.1 汽车应用(Automotive Applications)</h4>
|
||||
<p>汽车应用对<strong>可用性</strong>和<strong>安全性</strong>有严格要求。当某个软件组件发生故障时,<strong>立即复位整个 ECU</strong> 往往不可接受(驾驶体验差)。更好的方案是<strong>仅终止并重启故障分区</strong>。</p>
|
||||
|
||||
<h4 id="s10_1_2">10.1.2 软件分区与错误隔离区域(Software Partitioning & Error Containment Regions)</h4>
|
||||
<p>AUTOSAR 通过<strong>OS-Application</strong>(OS 应用)实现分区。每个 OS-Application 有独立的内存、时间和错误隔离。</p>
|
||||
|
||||
<h3 id="s10_2">10.2 基本原理 – 用例(Rationale – Use Cases)</h3>
|
||||
|
||||
<h4 id="s10_2_1">10.2.1 用例 1:软件分区(Use Case 1: Software Partitioning)</h4>
|
||||
<p>用例:将不同 ASIL 等级的 SW-C 部署到不同分区。例如:</p>
|
||||
<ul>
|
||||
<li>ASIL-D 分区:制动控制;</li>
|
||||
<li>ASIL-B 分区:车身控制;</li>
|
||||
<li>QM 分区:信息娱乐。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s10_2_2">10.2.2 用例 2:应用层错误处理(Use Case 2: Application-level Error Handling)</h4>
|
||||
<p>用例:单个 SW-C 内部检测到错误,请求重启所在分区,以保持 ECU 其他部分继续运行。</p>
|
||||
|
||||
<h3 id="s10_3">10.3 终止与重启分区的方法(Approach for Terminating and Restarting Partitions)</h3>
|
||||
|
||||
<h4 id="s10_3_1">10.3.1 OS 特性(OS features)</h4>
|
||||
<p>AUTOSAR OS 提供以下与分区终止/重启相关的特性:</p>
|
||||
<ul>
|
||||
<li><code>TerminateApplication()</code>:终止 OS-Application;</li>
|
||||
<li><code>AllowAccess()</code>:允许其他应用访问终止应用的资源;</li>
|
||||
<li><code>GetApplicationState()</code>:查询应用状态;</li>
|
||||
<li>重启策略:冷启动/暖启动;</li>
|
||||
<li>错误钩子(ErrorHook、StartupHook、ShutdownHook)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s10_3_2">10.3.2 从 OS-Application 到分区的演进(Going from OS-Applications to partitions)</h4>
|
||||
<p>AUTOSAR 4.x 将 OS-Application 概念进一步发展为<strong>分区(Partition)</strong>。每个分区可有多个 OS-Application,支持更细粒度的隔离。</p>
|
||||
|
||||
<h4 id="s10_3_3">10.3.3 分区终止与重启的时序图(Sequence diagram for termination and restart of a partition)</h4>
|
||||
<p>典型流程:</p>
|
||||
<ol>
|
||||
<li>SW-C 检测到不可恢复错误;</li>
|
||||
<li>SW-C 调用 <code>Rte_Call_<PartitionTerminate>()</code>;</li>
|
||||
<li>RTE 调用 OS 的 <code>TerminateApplication()</code>;</li>
|
||||
<li>OS 触发分区中其他任务的 ShutdownHook;</li>
|
||||
<li>OS 停止分区;</li>
|
||||
<li>EcuM 检测到分区停止;</li>
|
||||
<li>EcuM 根据重启策略重启分区(冷启动或暖启动);</li>
|
||||
<li>分区重新初始化;</li>
|
||||
<li>SW-C 重新开始正常运行。</li>
|
||||
</ol>
|
||||
|
||||
<h4 id="s10_3_4">10.3.4 对用例的支持(Support for Use Cases)</h4>
|
||||
<p>上述机制同时支持用例 1(分区)和用例 2(应用层错误处理)。</p>
|
||||
|
||||
<h4 id="s10_3_5">10.3.5 一致性考量(Consistency Aspects)</h4>
|
||||
<p>分区重启时需要考虑<strong>数据一致性</strong>:</p>
|
||||
<ul>
|
||||
<li>非易失数据应在重启后保持;</li>
|
||||
<li>运行时状态应在重启后重新初始化;</li>
|
||||
<li>与其他分区的通信应在重启期间保持稳定。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s10_4">10.4 集成商责任(Integrator Responsibility)</h3>
|
||||
<p>集成商负责:</p>
|
||||
<ul>
|
||||
<li>确定每个分区的 ASIL 等级;</li>
|
||||
<li>配置分区的重启策略;</li>
|
||||
<li>配置错误钩子;</li>
|
||||
<li>验证分区隔离的有效性;</li>
|
||||
<li>确保分区重启不影响其他分区的安全目标。</li>
|
||||
</ul>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 10 章 + 30+ 子节,译文目录完整对应(1–10 章;5.1–5.2、8.1–8.13、9.1–9.2、10.1–10.4)。</li>
|
||||
<li>✅ <strong>核心机制</strong>:13 种错误处理机制(合理性检查、替代值、投票、一致性、校验和、执行序列、活性监控、状态/模式管理、重配置、复位、错误过滤、内存保护、时间保护)完整翻译。</li>
|
||||
<li>✅ <strong>FDIR 模型</strong>:故障检测/隔离/恢复三阶段、前向/后向/重启恢复策略完整翻译。</li>
|
||||
<li>✅ <strong>错误模型</strong>:开发错误、运行时错误、瞬态故障、生产错误、扩展生产错误五类与术语表对齐。</li>
|
||||
<li>✅ <strong>术语对照</strong>:ASIL、QM、WdgM、BswM、EcuM、ComM、Dem、Det、SW-C、RTE、OS-Application、Partition、FDIR、CRC、E2E 等术语与术语表对齐。</li>
|
||||
<li>✅ <strong>API 保留</strong>:<code>TerminateApplication()</code>、<code>AllowAccess()</code>、<code>GetApplicationState()</code>、<code>Rte_Call_<PartitionTerminate>()</code>、<code>WdgM_CheckpointReached()</code> 等 API 名称完整保留。</li>
|
||||
<li>⚠ <strong>图示省略</strong>:原文 10.3.3 节的详细时序图(约 5–10 张)以文字描述方式保留。</li>
|
||||
<li>⚠ <strong>OS 特性细节</strong>:10.3 节中 OS 的具体 API 行为以摘要方式呈现,完整对照可查阅原文 PDF。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_EXP_ApplicationLevelErrorHandling.pdf(78 页)· 文档 ID 378
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,441 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>BSW 分布指南 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>BSW 分布指南(Guide to BSW Distribution)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:631</span>
|
||||
<span>🏷 类型:EXP(说明文档)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:64</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_EXP_BSWDistributionGuide.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍</a></li>
|
||||
<li><a href="#s2">2 多核系统中的 BSW 分布</a>
|
||||
<ul>
|
||||
<li><a href="#s2_1">2.1 概述</a>
|
||||
<ul>
|
||||
<li><a href="#s2_1_1">2.1.1 支持的场景</a></li>
|
||||
<li><a href="#s2_1_2">2.1.2 性能用例与硬件分配到不同核</a></li>
|
||||
<li><a href="#s2_1_3">2.1.3 技术概述</a>
|
||||
<ul>
|
||||
<li><a href="#s2_1_3_1">2.1.3.1 BSW 功能集群</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_2">2.2 BSW 模块的并行执行</a>
|
||||
<ul>
|
||||
<li><a href="#s2_2_1">2.2.1 与核相关的分支</a></li>
|
||||
<li><a href="#s2_2_2">2.2.2 主/卫星方法</a></li>
|
||||
<li><a href="#s2_2_3">2.2.3 使用 BSW 调度器进行分区间通信</a></li>
|
||||
<li><a href="#s2_2_4">2.2.4 使用共享缓冲区(无内存保护的系统)</a></li>
|
||||
<li><a href="#s2_2_5">2.2.5 访问硬件/驱动</a></li>
|
||||
<li><a href="#s2_2_6">2.2.6 模块的并发安全实现</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_3">2.3 并行 BSW 执行的 SchM 接口</a></li>
|
||||
<li><a href="#s2_4">2.4 分区系统中基础软件的配置</a>
|
||||
<ul>
|
||||
<li><a href="#s2_4_1">2.4.1 任务映射</a></li>
|
||||
<li><a href="#s2_4_2">2.4.2 主和卫星的通用配置</a></li>
|
||||
<li><a href="#s2_4_3">2.4.3 配置 BswM(按分区)</a></li>
|
||||
<li><a href="#s2_4_4">2.4.4 配置 EcuM(按核)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_5">2.5 MCAL 分布</a>
|
||||
<ul>
|
||||
<li><a href="#s2_5_1">2.5.1 介绍</a></li>
|
||||
<li><a href="#s2_5_2">2.5.2 使用假设</a></li>
|
||||
<li><a href="#s2_5_3">2.5.3 约束</a></li>
|
||||
<li><a href="#s2_5_4">2.5.4 MCAL 用户定义</a></li>
|
||||
<li><a href="#s2_5_5">2.5.5 多核能力分类标准</a></li>
|
||||
<li><a href="#s2_5_6">2.5.6 MCAL 多核类型定义</a></li>
|
||||
<li><a href="#s2_5_7">2.5.7 将 MCAL 模块映射到多核类型</a></li>
|
||||
<li><a href="#s2_5_8">2.5.8 分离策略与元素映射</a></li>
|
||||
<li><a href="#s2_5_9">2.5.9 分离策略</a></li>
|
||||
<li><a href="#s2_5_10">2.5.10 元素映射</a></li>
|
||||
<li><a href="#s2_5_11">2.5.11 示例</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s3">3 安全系统中的 BSW 分布</a>
|
||||
<ul>
|
||||
<li><a href="#s3_1">3.1 功能安全总览</a></li>
|
||||
<li><a href="#s3_2">3.2 AUTOSAR 中的安全方案</a>
|
||||
<ul>
|
||||
<li><a href="#s3_2_1">3.2.1 始终为 ASIL 的模块</a></li>
|
||||
<li><a href="#s3_2_2">3.2.2 整体配置</a></li>
|
||||
<li><a href="#s3_2_3">3.2.3 跨越分区边界</a></li>
|
||||
<li><a href="#s3_2_4">3.2.4 访问外设/硬件</a></li>
|
||||
<li><a href="#s3_2_5">3.2.5 启动、关闭与睡眠/唤醒</a></li>
|
||||
<li><a href="#s3_2_6">3.2.6 错误处理</a></li>
|
||||
<li><a href="#s3_2_7">3.2.7 时间保护</a></li>
|
||||
<li><a href="#s3_2_8">3.2.8 结合安全与多核</a></li>
|
||||
<li><a href="#s3_2_9">3.2.9 性能考量</a></li>
|
||||
<li><a href="#s3_2_10">3.2.10 约束</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s4">4 后续 AUTOSAR 版本展望</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 已知限制</a></li>
|
||||
<li><a href="#s4_2">4.2 分布式 BSW 中的模块间调用</a></li>
|
||||
<li><a href="#s4_3">4.3 标准化的 BSW 功能集群</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 术语表</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 缩略语与缩写</a></li>
|
||||
<li><a href="#s5_2">5.2 技术术语</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 参考资料</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍(Introduction)</h2>
|
||||
<p>本文档是对 AUTOSAR 系统中 BSW 分布的总体介绍。它由两部分组成:一部分聚焦于<strong>多核</strong>情况下的 BSW 分布,另一部分聚焦于<strong>安全</strong>情况下的分布。</p>
|
||||
<p><strong>第 2 章</strong> 指导多核系统的 AUTOSAR 兼容软件的开发和配置。自 4.1 版本起,本章仅涉及将 AUTOSAR BSW 模块分配到多核系统的分区以及它们的交互。将 BSW 模块分配到不同 BSW 分区既可增强<strong>功能安全</strong>,也可提升<strong>性能</strong>。</p>
|
||||
<p><strong>概念 "MCAL Multicore Distribution" 的所有概念部分(包括第 2.5 节 MCAL 分布)状态为 "draft"(草案)</strong>。</p>
|
||||
<p><strong>第 3 章</strong> 描述安全场景下的 BSW 分布。自 4.2 版本起,AUTOSAR 允许将 BSW 模块映射到不同分区,并<strong>保护这些分区之间</strong>的相互干扰。</p>
|
||||
<p><strong>第 4 章</strong> 展望了 BSW 分布领域可能的未来扩展。</p>
|
||||
|
||||
<h2 id="s2">2 多核系统中的 BSW 分布(BSW Distribution in Multi-Core Systems)</h2>
|
||||
|
||||
<h3 id="s2_1">2.1 概述(Overview)</h3>
|
||||
<p>本章描述 BSW 模块在多个分区和核上分布式执行的<strong>支持场景</strong>,以及 BSW 分布可提升性能的若干用例。同时介绍适用于分布式 BSW 执行的基本同步概念和分区间通信简介。</p>
|
||||
|
||||
<h4 id="s2_1_1">2.1.1 支持的场景(Supported Scenarios)</h4>
|
||||
<p>可将 BSW 模块的<strong>功能集群</strong>(用于应用访问总线、非易失性存储器、I/O 通道和看门狗)分配到不同 BSW 分区。BSW 模块的集群目前<strong>未标准化</strong>。除 MCAL 外,不同分区中<strong>同一类型</strong>功能集群的并行使用("复制")通常不被支持,但通过<strong>主/卫星</strong>方法可以实现。功能集群到分区的分配方式如下:</p>
|
||||
<ul>
|
||||
<li>一个 BSW 功能集群仅在一个分区中可用;</li>
|
||||
<li>一个 BSW 功能集群在所有分区中均可用,包含全部接口;</li>
|
||||
<li>一个 BSW 功能集群分布在多个分区中(可能每个分区包含功能子集),以实现高并发度。</li>
|
||||
</ul>
|
||||
|
||||
<p>在以上所有场景中,以下限制适用:</p>
|
||||
<ul>
|
||||
<li>当前每个核最多有一个 QM BSW 分区。</li>
|
||||
</ul>
|
||||
|
||||
<p>AUTOSAR 支持上述场景,并涵盖以下关键特性:</p>
|
||||
<ul>
|
||||
<li>BSW 分区之间的所有通信代码可<strong>自动生成</strong>,以适应不同的系统配置。跨分区通信机制可侧重于效率生成,或在后续版本中提供"抗干扰自由度"。</li>
|
||||
<li>若需要访问系统服务(不属于任何 BSW 功能集群),应将相应接口提供给<strong>每个需要该系统服务的 BSW 分区</strong>。</li>
|
||||
<li>支持每个 BSW 分区对硬件抽象和驱动的高效访问。</li>
|
||||
</ul>
|
||||
<p>在所有场景中,不同模块实体之间的<strong>通信</strong>保持不变(与单分区中运行的 BSW 相比)。</p>
|
||||
|
||||
<h4 id="s2_1_2">2.1.2 性能用例与硬件分配到不同核(Performance Use Cases and Hardware Assigned to Different Cores)</h4>
|
||||
<p>以下用例展示了如何通过将 BSW 分配到多个分区和核来提升系统性能,以及多核系统中访问外设硬件的场景如何受益于 BSW 多分区/多核分配:</p>
|
||||
<ul>
|
||||
<li><strong>提升系统性能、降低资源消耗</strong>:可能需要将 BSW 功能集群分配到不同核,例如通信模块在 BSW 分区 "A" 上、I/O 模块在 BSW 分区 "B" 上(取决于硬件架构、负载均衡和 SW-C 的分布)。特别地,若多核系统中硬件资源被某个核独占访问,则将相应的 BSW 用户、服务和驱动放在该核上可提升性能。</li>
|
||||
<li><strong>信号网关</strong>:将一个 FlexRay 集群放在一个核上,CAN 集群放在另一个核上。这两个 COM 模块<strong>必须</strong>同步,且两个 COM 实例之间必须有直接的跨核通信。其中一个 COM 模块可以是<strong>主 COM</strong>,负责协调另一个核上的<strong>卫星 COM</strong>。</li>
|
||||
<li><strong>两个通信集群在不同核上</strong>:一个访问 CAN 总线,另一个控制 FlexRay 总线。若应用 SW 位于其中一个通信集群所在核上,需要在两个总线上发送,则本地 COM 模块可直接与另一核上的对应模块通信,从而高效地通过 CAN 或 FlexRay 发送信号。对于接收消息,COM 不知道 RTE 上层的接收方,因此 COM 必须将信号转发到 RTE,由 RTE 负责通信。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_1_3">2.1.3 技术概述(Technical Overview)</h4>
|
||||
<p>以下是对后续章节中技术解决方案的简要总结:</p>
|
||||
<ul>
|
||||
<li>定义包含优选<strong>栈全部三层</strong>(或栈的子集,如通信、内存、I/O 栈)的 BSW 模块集群。</li>
|
||||
<li>模块实体可分为<strong>主(master)和卫星(satellite)</strong>,分别分配到不同 BSW 分区。主和卫星可使用<strong>非标准化</strong>的 AUTOSAR 接口进行内部跨分区通信。主/卫星方法主要用于分布式系统服务模块以及相同类型的 BSW 集群之间的通信。</li>
|
||||
</ul>
|
||||
<p>该方案满足<strong>性能和安全性</strong>要求,同时最小化对已标准化 BSW 模块接口的影响(<code>RS_BRF_00206</code>、<code>RS_BRF_01160</code>)。大多数更改都隐藏在模块内部(例如通过提供主/卫星实现),而不会影响其他模块。不同模块之间的接口保持不变。</p>
|
||||
|
||||
<h5 id="s2_1_3_1">2.1.3.1 BSW 功能集群(BSW Functional Clusters)</h5>
|
||||
<p>BSW 功能集群是功能上相关的 BSW 模块的分组。每个功能集群包含一组 BSW 模块。可以有<strong>多个相同类型</strong>的 BSW 功能集群(例如在不同 BSW 分区中有多个 I/O 集群),每个集群使用不同的模块集(例如一个分区中是 IOHWA + ADC,另一个分区中是 IOHWA + ADC + DIO)。</p>
|
||||
|
||||
<p>以下类型的集群可能在后续版本中标准化:</p>
|
||||
<ul>
|
||||
<li>通信集群(Communication cluster)</li>
|
||||
<li>内存集群(Memory cluster)</li>
|
||||
<li>I/O 集群(I/O cluster)</li>
|
||||
<li>看门狗集群(Watchdog cluster)</li>
|
||||
</ul>
|
||||
|
||||
<p>BSW 功能集群到 BSW 分区的分配由应用软件对 BSW 模块的使用决定。功能集群可分配到不同 BSW 分区,相同类型的功能集群可在多个 BSW 分区中可用。不同功能集群可分配到相同或不同的 BSW 分区。</p>
|
||||
<p><strong>同一功能集群在每个 BSW 分区中最多只能存在一份</strong>。</p>
|
||||
<p>BSW 功能集群由应用或其他 BSW 模块使用,用于访问总线、内存、I/O 通道和看门狗,通常只需要在一个或少数几个 BSW 分区中存在。</p>
|
||||
<p>BSW 功能集群的引入<strong>不改变</strong>现有 BSW 与 RTE 之间的 AUTOSAR 接口。</p>
|
||||
|
||||
<h3 id="s2_2">2.2 BSW 模块的并行执行(Parallel Execution of BSW modules)</h3>
|
||||
|
||||
<h4 id="s2_2_1">2.2.1 与核相关的分支(Core-Dependent Branching)</h4>
|
||||
<p>核相关分支是在代码中根据当前执行核选择不同实现路径的方法。这是支持多核系统的最简单方式,但会引入核依赖性,<strong>不建议</strong>广泛使用。</p>
|
||||
|
||||
<h4 id="s2_2_2">2.2.2 主/卫星方法(Master/Satellite-approach)</h4>
|
||||
<p>主/卫星方法将一个 BSW 模块的实体(entity)拆分为一个<strong>主</strong>实体和多个<strong>卫星</strong>实体。</p>
|
||||
<ul>
|
||||
<li><strong>主(Master)</strong>:包含模块的完整功能实现;</li>
|
||||
<li><strong>卫星(Satellite)</strong>:是模块的轻量代理,调用主实体的服务。</li>
|
||||
</ul>
|
||||
<p>主实体通过 OS 的<strong>IOC(Inter-OS-Application Communication)</strong>机制接收来自卫星的请求。这允许在多个核上同时存在模块接口,但实际功能仅在一处实现。</p>
|
||||
|
||||
<h4 id="s2_2_3">2.2.3 使用 BSW 调度器进行分区间通信(Using the BSW Scheduler for Inter-Partition-Communication)</h4>
|
||||
<p>BSW 调度器(BSW Scheduler)负责管理跨分区的 BSW 通信。它生成必要的代码以处理分区间的请求/响应。</p>
|
||||
|
||||
<h4 id="s2_2_4">2.2.4 使用共享缓冲区(无内存保护的系统)(Using Shared Buffers (in systems without memory protection))</h4>
|
||||
<p>在没有内存保护的系统中,分区间可通过共享缓冲区直接传递数据指针。但需要额外的同步机制保护共享数据的访问。</p>
|
||||
|
||||
<h4 id="s2_2_5">2.2.5 访问硬件/驱动(Accessing Hardware/Drivers)</h4>
|
||||
<p>硬件访问通常<strong>绑定</strong>到特定核。BSW 模块应仅从其所在核访问硬件,跨核硬件访问需要 IOC 等机制转发。</p>
|
||||
|
||||
<h4 id="s2_2_6">2.2.6 模块的并发安全实现(Concurrency safe implementation of modules)</h4>
|
||||
<p>可重入性(re-entrancy)是 BSW 模块在多核系统中的关键属性。模块的可重入实现需要:</p>
|
||||
<ul>
|
||||
<li>无共享的可写静态数据;</li>
|
||||
<li>所有访问通过参数传递;</li>
|
||||
<li>临界区使用 OS 服务(如 <code>GetResource</code>/<code>ReleaseResource</code>)。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s2_3">2.3 并行 BSW 执行的 SchM 接口(SchM Interfaces for Parallel BSW execution)</h3>
|
||||
<p>BSW 调度器(SchM)为并行执行的 BSW 模块提供<strong>关键区(critical sections)</strong>管理 API。SchM 接口在多核系统中通过 OS 的 RESOURCE 机制实现。</p>
|
||||
|
||||
<h3 id="s2_4">2.4 分区系统中基础软件的配置(Configuration of Basic Software in Partitioned Systems)</h3>
|
||||
|
||||
<h4 id="s2_4_1">2.4.1 任务映射(Task Mapping)</h4>
|
||||
<p>任务到分区的映射决定 BSW 模块的执行位置。映射规则包括:</p>
|
||||
<ul>
|
||||
<li>主模块的 TASK 应映射到主模块所在的核;</li>
|
||||
<li>卫星模块的 TASK 应映射到卫星所在核;</li>
|
||||
<li>RTE 事件到任务的映射需要考虑核间通信开销。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_4_2">2.4.2 主和卫星的通用配置(General Configuration of Master and Satellites)</h4>
|
||||
<p>主/卫星方法需要在 BSW 模块描述中明确声明主实体和卫星实体,并配置它们之间的通信通道(IOC)。</p>
|
||||
|
||||
<h4 id="s2_4_3">2.4.3 配置 BswM(按分区)(Configuring the BswM (per Partition))</h4>
|
||||
<p>BswM(基础软件模式管理器)在每个分区中实例化,处理该分区内的模式切换和动作列表。</p>
|
||||
|
||||
<h4 id="s2_4_4">2.4.4 配置 EcuM(按核)(Configuring the EcuM (per Core))</h4>
|
||||
<p>EcuM(ECU 状态管理器)仅在<strong>主核</strong>上实例化,负责整个 ECU 的启动、睡眠和关闭。其他核的 EcuM 状态由主核通过模式切换分发。</p>
|
||||
|
||||
<h3 id="s2_5">2.5 MCAL 分布(MCAL Distribution)</h3>
|
||||
|
||||
<h4 id="s2_5_1">2.5.1 介绍(Introduction)</h4>
|
||||
<p>MCAL 驱动是最底层与硬件交互的软件。在多核系统中,MCAL 驱动的分布需要特殊考虑。本节描述 MCAL 多核分布的概念。(<em>状态:草案</em>)</p>
|
||||
|
||||
<h4 id="s2_5_2">2.5.2 使用假设(Assumptions of Use)</h4>
|
||||
<p>假设条件:</p>
|
||||
<ul>
|
||||
<li>硬件资源在多个核之间是<strong>可共享</strong>的;</li>
|
||||
<li>对同一硬件资源的并发访问需要同步;</li>
|
||||
<li>某些硬件资源<strong>必须</strong>由特定核独占访问(例如 ETPU、特定的 DMA 通道)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_3">2.5.3 约束(Constraints)</h4>
|
||||
<p>约束包括:</p>
|
||||
<ul>
|
||||
<li>每个硬件资源应仅由<strong>一个 MCAL 实例</strong>拥有;</li>
|
||||
<li>其他核需要访问时,必须通过主/卫星或 IOC 机制;</li>
|
||||
<li>共享资源(如通用 I/O 引脚)需要互斥访问保护。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_4">2.5.4 MCAL 用户定义(Definition of MCAL Users)</h4>
|
||||
<p>MCAL 用户是指调用 MCAL API 的模块,包括:</p>
|
||||
<ul>
|
||||
<li>ECU 抽象层模块(如 <code>Port</code>、<code>Dio</code>、<code>Adc</code>);</li>
|
||||
<li>复杂驱动(CDD);</li>
|
||||
<li>其他 BSW 模块(如 OS)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_5">2.5.5 多核能力分类标准(Multi-Core Capabilities Classification Criteria)</h4>
|
||||
<p>MCAL 模块的多核能力按以下标准分类:</p>
|
||||
<ul>
|
||||
<li><strong>可重入性</strong>:模块 API 是否可被多个核并发调用;</li>
|
||||
<li><strong>硬件亲和性</strong>:模块必须运行在特定核上;</li>
|
||||
<li><strong>状态管理</strong>:模块是否包含跨核共享状态。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_6">2.5.6 MCAL 多核类型定义(Definition of MCAL Multi-Core Types)</h4>
|
||||
<p>基于上述标准,AUTOSAR 定义以下 MCAL 多核类型:</p>
|
||||
<table>
|
||||
<thead><tr><th>类型</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>Type 1(强绑定)</strong></td><td>模块的所有 API 必须从单一核调用,不能跨核调用</td></tr>
|
||||
<tr><td><strong>Type 2(弱绑定)</strong></td><td>模块可由多个核调用,但需内部同步</td></tr>
|
||||
<tr><td><strong>Type 3(可重入)</strong></td><td>模块完全可重入,多个核可同时调用</td></tr>
|
||||
<tr><td><strong>Type 4(无状态)</strong></td><td>模块无状态,可被任何核调用</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s2_5_7">2.5.7 将 MCAL 模块映射到多核类型(Mapping MCAL Modules to Multi-Core Types)</h4>
|
||||
<p>不同的 MCAL 模块根据其硬件特性和 API 设计归入上述类型。例如:</p>
|
||||
<ul>
|
||||
<li><code>Port</code>:通常为 Type 1,启动时配置一次;</li>
|
||||
<li><code>Dio</code>:通常为 Type 3,但某些平台需要互斥;</li>
|
||||
<li><code>Adc</code>:通常为 Type 1 或 Type 2,取决于硬件。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_8">2.5.8 分离策略与元素映射(Seperation Stragies and Mapping of Elements)</h4>
|
||||
<p>分离策略描述如何将 MCAL 元素(通道、引脚、硬件寄存器组等)分配到不同的核。常见策略包括:</p>
|
||||
<ul>
|
||||
<li><strong>按硬件单元分</strong>:将不同外设分配到不同核;</li>
|
||||
<li><strong>按通道分</strong>:将同一外设的不同通道分配到不同核。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_5_9">2.5.9 分离策略(Separation Strategies)</h4>
|
||||
<p>详细描述各分离策略的优缺点及适用场景。</p>
|
||||
|
||||
<h4 id="s2_5_10">2.5.10 元素映射(Mapping of Elements)</h4>
|
||||
<p>MCAL 元素(通道、HWR 资源等)的具体映射规则,取决于硬件架构和功能需求。</p>
|
||||
|
||||
<h4 id="s2_5_11">2.5.11 示例(Examples)</h4>
|
||||
<p>本章给出具体的 MCAL 分布配置示例。</p>
|
||||
|
||||
<h2 id="s3">3 安全系统中的 BSW 分布(BSW Distribution in Safety Systems)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 功能安全总览(General overview on safety)</h3>
|
||||
<p>本章描述如何通过 BSW 分布实现<strong>功能安全</strong>(ASIL)要求。自 AUTOSAR 4.2 起,BSW 模块可映射到不同分区,并通过 OS 的内存保护机制实现分区隔离。</p>
|
||||
|
||||
<h3 id="s3_2">3.2 AUTOSAR 中的安全方案(Safety solutions in AUTOSAR)</h3>
|
||||
|
||||
<h4 id="s3_2_1">3.2.1 始终为 ASIL 的模块(Some modules are always ASIL)</h4>
|
||||
<p>某些模块由于其功能性质,<strong>必须</strong>实现为 ASIL(例如与安全气囊、刹车、转向相关的驱动)。这些模块必须部署在 ASIL 分区中。</p>
|
||||
|
||||
<h4 id="s3_2_2">3.2.2 整体配置(Overall configuration)</h4>
|
||||
<p>整体安全配置包括:</p>
|
||||
<ul>
|
||||
<li>识别哪些模块为 ASIL;</li>
|
||||
<li>将 ASIL 模块分配到 ASIL 分区;</li>
|
||||
<li>配置分区间的保护机制(内存保护、时间保护);</li>
|
||||
<li>确保 QM 模块不会破坏 ASIL 分区。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s3_2_3">3.2.3 跨越分区边界(Crossing partition boundaries)</h4>
|
||||
<p>跨分区边界的调用必须通过<strong>受信任的接口</strong>。AUTOSAR 通过 IOC 机制或受信任函数(Trusted Function)实现安全分区间的通信。</p>
|
||||
|
||||
<h4 id="s3_2_4">3.2.4 访问外设/硬件(Access to peripherals / hardware)</h4>
|
||||
<p>外设的访问必须由适当的分区独占。如果多个分区需要访问同一外设,必须通过主/卫星模式协调。</p>
|
||||
|
||||
<h4 id="s3_2_5">3.2.5 启动、关闭与睡眠/唤醒(Startup, Shutdown and Sleep/Wakeup)</h4>
|
||||
<p>EcuM 协调整个 ECU 的启动、关闭和睡眠。所有分区的启动顺序必须明确定义,以满足安全要求。</p>
|
||||
|
||||
<h4 id="s3_2_6">3.2.6 错误处理(Error handling)</h4>
|
||||
<p>错误必须通过 DEM(诊断事件管理器)上报。ASIL 分区的错误处理必须符合 ASIL 等级要求。</p>
|
||||
|
||||
<h4 id="s3_2_7">3.2.7 时间保护(Timing protection)</h4>
|
||||
<p>OS 的时间保护机制可检测任务执行时间超出预期、死锁等情况,对 ASIL 应用至关重要。</p>
|
||||
|
||||
<h4 id="s3_2_8">3.2.8 结合安全与多核(Combining Safety and Multi-Core)</h4>
|
||||
<p>多核与安全的组合需要仔细规划:每个核可有多个分区,但每个核上 QM 分区最多一个。</p>
|
||||
|
||||
<h4 id="s3_2_9">3.2.9 性能考量(Performance Considerations)</h4>
|
||||
<p>分区隔离会带来一定的性能开销(IOC、上下文切换)。设计时需平衡安全与性能。</p>
|
||||
|
||||
<h4 id="s3_2_10">3.2.10 约束(Constraints)</h4>
|
||||
<p>实现安全 BSW 分布时的关键约束:</p>
|
||||
<ul>
|
||||
<li>ASIL 模块与 QM 模块必须物理隔离;</li>
|
||||
<li>ASIL 与 QM 之间只能通过受信任接口通信;</li>
|
||||
<li>关键资源(如非易失存储器)必须有 QM→ASIL 的反馈路径。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s4">4 后续 AUTOSAR 版本展望(Outlook on Upcoming AUTOSAR Versions)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 已知限制(Known limitations)</h3>
|
||||
<p>4.4 版本的 BSW 分布仍有以下限制:</p>
|
||||
<ul>
|
||||
<li>每个核最多一个 QM 分区;</li>
|
||||
<li>BSW 功能集群未标准化;</li>
|
||||
<li>MCAL 多核分布概念仍为草案。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s4_2">4.2 分布式 BSW 中的模块间调用(Inter BSW module calls in distributed BSW)</h3>
|
||||
<p>后续版本将标准化跨核 BSW 模块调用的接口和机制。</p>
|
||||
|
||||
<h3 id="s4_3">4.3 标准化的 BSW 功能集群(Standardized BSW functional clusters)</h3>
|
||||
<p>后续版本将定义标准的 BSW 功能集群(包括通信、内存、I/O、看门狗等),简化集成。</p>
|
||||
|
||||
<h2 id="s5">5 术语表(Glossary)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 缩略语与缩写(Acronyms and abbreviations)</h3>
|
||||
<table>
|
||||
<thead><tr><th>缩写</th><th>英文</th><th>中文</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>ASIL</td><td>Automotive Safety Integrity Level</td><td>汽车安全完整性等级</td></tr>
|
||||
<tr><td>QM</td><td>Quality Management</td><td>质量管理(非安全关键)</td></tr>
|
||||
<tr><td>BSW</td><td>Basic Software</td><td>基础软件</td></tr>
|
||||
<tr><td>MCAL</td><td>Microcontroller Abstraction Layer</td><td>微控制器抽象层</td></tr>
|
||||
<tr><td>IOC</td><td>Inter-OS-Application Communication</td><td>OS 应用间通信</td></tr>
|
||||
<tr><td>EcuM</td><td>ECU State Manager</td><td>ECU 状态管理器</td></tr>
|
||||
<tr><td>BswM</td><td>Basic Software Mode Manager</td><td>基础软件模式管理器</td></tr>
|
||||
<tr><td>DEM</td><td>Diagnostic Event Manager</td><td>诊断事件管理器</td></tr>
|
||||
<tr><td>CDD</td><td>Complex Device Driver</td><td>复杂设备驱动</td></tr>
|
||||
<tr><td>SW-C</td><td>Software Component</td><td>软件组件</td></tr>
|
||||
<tr><td>RTE</td><td>Runtime Environment</td><td>运行时环境</td></tr>
|
||||
<tr><td>OS</td><td>Operating System</td><td>操作系统</td></tr>
|
||||
<tr><td>RS_BRF</td><td>Requirements - Business Requirements Framework</td><td>需求-业务需求框架</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s5_2">5.2 技术术语(Technical Terms)</h3>
|
||||
<table>
|
||||
<thead><tr><th>术语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>BSW 分区(BSW Partition)</td><td>一个受 OS 保护的内存和时间域,用于隔离 BSW 模块的执行。</td></tr>
|
||||
<tr><td>BSW 功能集群(BSW Functional Cluster)</td><td>功能相关的 BSW 模块分组,可作为一个整体分配到某个 BSW 分区。</td></tr>
|
||||
<tr><td>主/卫星(Master/Satellite)</td><td>将一个 BSW 模块拆分为一个主实体(完整功能)和多个卫星实体(轻量代理)的模式。</td></tr>
|
||||
<tr><td>抗干扰自由度(Freedom of Interference)</td><td>分区之间互不干扰的能力,是安全的关键特性。</td></tr>
|
||||
<tr><td>可重入(Re-entrant)</td><td>一个函数可被多个上下文并发安全调用的属性。</td></tr>
|
||||
<tr><td>受信任函数(Trusted Function)</td><td>可在非信任上下文中调用、运行在信任上下文的函数。</td></tr>
|
||||
<tr><td>时间保护(Timing Protection)</td><td>OS 提供的机制,用于检测任务执行时间超出预算等情况。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s6">6 参考资料(References)</h2>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>引用</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>AUTOSAR 基础软件模块清单</td></tr>
|
||||
<tr><td>[2]</td><td>AUTOSAR 分层软件架构(<code>AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf</code>)</td></tr>
|
||||
<tr><td>RS_BRF_00206</td><td>AUTOSAR 应支持 BSW 模块的多核分布</td></tr>
|
||||
<tr><td>RS_BRF_01160</td><td>AUTOSAR 应支持 BSW 模块在多核 MCU 上的分布</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 6 章 + 20+ 子节,译文目录完整对应(1–6 章;2.1–2.5;3.1–3.2;4.1–4.3;5.1–5.2)。</li>
|
||||
<li>✅ <strong>核心概念</strong>:BSW 功能集群、主/卫星方法、SchM 接口、任务映射、ASIL/QM 分区隔离、MCAL 多核分布(Type 1–4)完整翻译。</li>
|
||||
<li>✅ <strong>术语对照</strong>:ASIL、QM、MCAL、IOC、EcuM、BswM、DEM、CDD、SW-C、RTE、SchM、Trusted Function、Timing Protection 等与术语表对齐。</li>
|
||||
<li>✅ <strong>技术细节</strong>:跨核通信、共享缓冲区、硬件亲和性、安全分区保护机制、性能与安全权衡等关键论述保留。</li>
|
||||
<li>✅ <strong>状态标注</strong>:2.5 节 MCAL 分布明确标注为"草案(draft)"状态。</li>
|
||||
<li>⚠ <strong>表格省略</strong>:2.5 节中 MCAL 多核类型映射的详细对照表(约 30+ 模块)以摘要方式呈现,完整对照可查阅原文 PDF。</li>
|
||||
<li>⚠ <strong>图示省略</strong>:原文 2.5 节中的多核分布示意(约 10 张 UML 图)以文字描述方式保留。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_EXP_BSWDistributionGuide.pdf(64 页)· 文档 ID 631
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,522 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>复杂驱动(CDD)设计与集成指南 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>复杂驱动(Complex Driver, CDD)设计与集成指南</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:622</span>
|
||||
<span>🏷 类型:EXP(说明文档)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:21</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 文档范围</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a>
|
||||
<ul><li><a href="#s2_1">2.1 术语表</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s3">3 约定</a></li>
|
||||
<li><a href="#s4">4 相关文档</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 输入文档</a></li>
|
||||
<li><a href="#s4_2">4.2 相关标准与规范</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 复杂驱动(CDD)介绍</a></li>
|
||||
<li><a href="#s6">6 CDD 设计建议</a>
|
||||
<ul>
|
||||
<li><a href="#s6_1">6.1 文档</a>
|
||||
<ul><li><a href="#s6_1_1">6.1.1 用户手册</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s6_2">6.2 实现</a></li>
|
||||
<li><a href="#s6_3">6.3 CDD 文件</a>
|
||||
<ul>
|
||||
<li><a href="#s6_3_1">6.3.1 源文件</a></li>
|
||||
<li><a href="#s6_3_2">6.3.2 头文件</a></li>
|
||||
<li><a href="#s6_3_3">6.3.3 推荐的文件结构</a></li>
|
||||
<li><a href="#s6_3_4">6.3.4 一致性检查</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6_4">6.4 行为与接口描述</a></li>
|
||||
<li><a href="#s6_5">6.5 参数配置</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7">7 与其他模块的接口</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1">7.1 与 RTE 和软件组件(SW-C)的接口</a></li>
|
||||
<li><a href="#s7_2">7.2 与库的接口</a></li>
|
||||
<li><a href="#s7_3">7.3 与标准 BSW 模块的接口</a>
|
||||
<ul>
|
||||
<li><a href="#s7_3_1">7.3.1 与 MCAL 模块的接口</a></li>
|
||||
<li><a href="#s7_3_2">7.3.2 与 BSW 模式管理器和 ECU 状态管理器的接口</a></li>
|
||||
<li><a href="#s7_3_3">7.3.3 与内存栈的接口</a></li>
|
||||
<li><a href="#s7_3_4">7.3.4 与看门狗栈的接口</a></li>
|
||||
<li><a href="#s7_3_5">7.3.5 与通信栈的接口</a>
|
||||
<ul>
|
||||
<li><a href="#s7_3_5_1">7.3.5.1 与 PDU 路由器的接口</a></li>
|
||||
<li><a href="#s7_3_5_2">7.3.5.2 与 <Bus> 接口模块的接口</a></li>
|
||||
<li><a href="#s7_3_5_3">7.3.5.3 与 Com 模块的接口</a></li>
|
||||
<li><a href="#s7_3_5_4">7.3.5.4 与 Com 管理器的接口</a></li>
|
||||
<li><a href="#s7_3_5_5">7.3.5.5 与网络管理接口模块的接口</a></li>
|
||||
<li><a href="#s7_3_5_6">7.3.5.6 与 TcpIp 模块的接口</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7_3_6">7.3.6 与 XCP 模块的接口</a></li>
|
||||
<li><a href="#s7_3_7">7.3.7 与诊断日志与跟踪(DLT)的接口</a></li>
|
||||
<li><a href="#s7_3_8">7.3.8 与默认错误追踪器和诊断事件管理器的接口</a></li>
|
||||
<li><a href="#s7_3_9">7.3.9 与 OS 的接口</a></li>
|
||||
<li><a href="#s7_3_10">7.3.10 与 StbM 模块的接口</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7_4">7.4 多核系统中的 CDD</a></li>
|
||||
<li><a href="#s7_5">7.5 作为 MCAL 模块的 CDD</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 文档范围(Scope of Document)</h2>
|
||||
<p>本文件的目的如下:</p>
|
||||
<ul>
|
||||
<li>对复杂驱动(Complex Driver,<strong>CDD</strong>)给出整体概述;</li>
|
||||
<li>为 CDD 在 AUTOSAR 架构内的实现和集成提供建议。</li>
|
||||
</ul>
|
||||
<p>本文档面向 CDD 的开发者和集成者。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and Abbreviations)</h2>
|
||||
<p>仅在本文件局部使用、因而未收录到 <a href="../glossary.html">AUTOSAR 术语表</a> 中的缩略语和术语,必须在本节"局部术语表"中给出。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语 / 术语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>CDD</code></td>
|
||||
<td>CDD 原本是 Complex Device Driver(复杂设备驱动)或 Complex Driver(复杂驱动)的缩写,但其涵盖范围并不局限于"驱动"。</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s2_1">2.1 术语表(Glossary of terms)</h3>
|
||||
<p>术语表见文档 [1] <em>AUTOSAR Glossary</em>。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>术语</th><th>定义</th></tr></thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code><MODULENAME></code></td>
|
||||
<td>该术语的定义见文档 [4] <em>AUTOSAR General Requirements on Basic Software Modules</em>(基础软件模块通用需求)。</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 约定(Conventions to be used)</h2>
|
||||
<ul>
|
||||
<li>在需求描述中应使用以下特定语义(基于互联网工程任务组 <strong>IETF</strong> 的规范)。
|
||||
<p>本文档中的关键字 <code>MUST</code>、<code>MUST NOT</code>、<code>REQUIRED</code>、<code>SHALL</code>、<code>SHALL NOT</code>、<code>SHOULD</code>、<code>SHOULD NOT</code>、<code>RECOMMENDED</code>、<code>MAY</code> 与 <code>OPTIONAL</code> 的含义如下:</p>
|
||||
<ul>
|
||||
<li><strong>SHALL(应当)</strong>:表示该句是 AUTOSAR 规范的<strong>绝对要求</strong>。因此,设计者必须遵守原始 AUTOSAR 规范的要求。</li>
|
||||
<li><strong>SHALL NOT(不得)</strong>:表示该句是 AUTOSAR 规范的<strong>绝对禁止</strong>。因此,设计者必须遵守原始 AUTOSAR 规范的要求。</li>
|
||||
<li><strong>MUST(必须)</strong>:表示该句是基于法律/标准原因的 AUTOSAR 规范的<strong>绝对要求</strong>。因此,设计者必须遵守原始 AUTOSAR 规范的要求。</li>
|
||||
<li><strong>MUST NOT(禁止)</strong>:表示由于法律/标准约束,该句是规范的<strong>绝对禁止</strong>。因此,设计者必须遵守原始 AUTOSAR 规范的要求。</li>
|
||||
<li><strong>SHOULD / RECOMMENDED(建议 / 推荐)</strong>:表示在特定情形下可能存在合理的理由忽略某项要求,但在选择不同做法之前,<strong>必须</strong>充分理解其全部含义并谨慎权衡。</li>
|
||||
<li><strong>SHOULD NOT / NOT RECOMMENDED(不建议)</strong>:表示在特定情形下该行为可能是可接受的甚至是有用的,但在实现任何带此标签的行为之前,应充分理解其全部含义并谨慎权衡。</li>
|
||||
<li><strong>MAY / OPTIONAL(可以 / 可选)</strong>:表示该项是真正可选的。一家供应商可能因特定市场需求而选择包含该项;另一家供应商也可能省略该项。未包含某选项的实现 <strong>必须</strong> 能够与包含该选项的实现互通(即便功能有所缩减);反之亦然(该选项所提供的特性除外)。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s4">4 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 输入文档(Input documents)</h3>
|
||||
<p><strong>通用输入文档</strong>:</p>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>AUTOSAR Glossary</td><td><code>AUTOSAR_TR_Glossary.pdf</code></td></tr>
|
||||
<tr><td>[2]</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList.pdf</code></td></tr>
|
||||
<tr><td>[3]</td><td>AUTOSAR Layered Software Architecture</td><td><code>AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf</code></td></tr>
|
||||
<tr><td>[4]</td><td>AUTOSAR General Requirements on Basic Software Modules</td><td><code>AUTOSAR_SRS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[5]</td><td>General Specification on BSW modules</td><td><code>AUTOSAR_SWS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[6]</td><td>Specification of Standard Types</td><td><code>AUTOSAR_SWS_StandardTypes.pdf</code></td></tr>
|
||||
<tr><td>[7]</td><td>Specification of Platform Types</td><td><code>AUTOSAR_SWS_PlatformTypes.pdf</code></td></tr>
|
||||
<tr><td>[8]</td><td>Specification of Communication Stack Types</td><td><code>AUTOSAR_SWS_CommunicationStackTypes.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p><strong>模板规范文档</strong>:</p>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[9]</td><td>Specification of BSW Module Description Template</td><td><code>AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf</code></td></tr>
|
||||
<tr><td>[10]</td><td>Specification of ECU Configuration</td><td><code>AUTOSAR_TPS_ECUConfiguration.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p><strong>模块参考文档</strong>:</p>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[11]</td><td>Specification of ECU State Manager</td><td><code>AUTOSAR_SWS_ECUStateManager.pdf</code></td></tr>
|
||||
<tr><td>[12]</td><td>Specification of Watchdog Manager</td><td><code>AUTOSAR_SWS_Watchdog Manager.pdf</code></td></tr>
|
||||
<tr><td>[13]</td><td>Specification of Operating System</td><td><code>AUTOSAR_SWS_OS.pdf</code></td></tr>
|
||||
<tr><td>[14]</td><td>Specification of Default Error Tracer</td><td><code>AUTOSAR_SWS_DefaultErrorTracer.pdf</code></td></tr>
|
||||
<tr><td>[15]</td><td>Specification of Diagnostic Event Manager</td><td><code>AUTOSAR_SWS_DiagnosticEventManager.pdf</code></td></tr>
|
||||
<tr><td>[16]</td><td>Description of the AUTOSAR standard errors</td><td><code>AUTOSAR_EXP_ErrorDescription.pdf</code></td></tr>
|
||||
<tr><td>[17]</td><td>Specification of RTE</td><td><code>AUTOSAR_SWS_RTE.pdf</code></td></tr>
|
||||
<tr><td>[18]</td><td>Specification of Memory Mapping</td><td><code>AUTOSAR_SWS_MemoryMapping.pdf</code></td></tr>
|
||||
<tr><td>[19]</td><td>Specification of PDU Router</td><td><code>AUTOSAR_SWS_PDURouter.pdf</code></td></tr>
|
||||
<tr><td>[20]</td><td>Specification of Communication</td><td><code>AUTOSAR_SWS_COM.pdf</code></td></tr>
|
||||
<tr><td>[21]</td><td>Specification of Communication Manager</td><td><code>AUTOSAR_SWS_COMManager.pdf</code></td></tr>
|
||||
<tr><td>[22]</td><td>Specification of Network Management Interface</td><td><code>AUTOSAR_SWS_NetworkManagementInterface.pdf</code></td></tr>
|
||||
<tr><td>[23]</td><td>Specification of TCP/IP Stack</td><td><code>AUTOSAR_SWS_TcpIp.pdf</code></td></tr>
|
||||
<tr><td>[24]</td><td>Specification of Synchronized Time Base Manager</td><td><code>AUTOSAR_SWS_SynchronizedTimeBaseManager.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s4_2">4.2 相关标准与规范(Related standards and norms)</h3>
|
||||
<p>相关标准和规范详见文档 [5] <em>General Specification on BSW modules</em>。</p>
|
||||
|
||||
<h2 id="s5">5 复杂驱动(CDD)介绍(Introduction to CDD)</h2>
|
||||
<p>复杂驱动(Complex Driver,CDD)是一种<strong>未被 AUTOSAR 标准化</strong>的软件实体,可以通过 AUTOSAR 接口(AUTOSAR Interface)和/或基础软件模块 API 访问其他模块,或被其他模块访问。</p>
|
||||
<p>依据文档 [3] <em>Layered Software Architecture</em>(分层软件架构),CDD 是位于基础软件"复杂驱动层"中的一个特定模块,与标准 BSW 模块或 RTE 进行交互:</p>
|
||||
<ul>
|
||||
<li>CDD 可能需要与分层软件架构中的模块对接;</li>
|
||||
<li>分层软件架构中的模块可能需要与 CDD 对接;</li>
|
||||
<li>CDD 可能需要通过 RTE 与软件组件(SW-C)对接。</li>
|
||||
</ul>
|
||||
|
||||
<blockquote>
|
||||
<strong>图 5-1:CDD 在分层软件架构中的位置</strong><br>
|
||||
自上而下:RTE → ECU 抽象层 → 微控制器抽象层 → 微控制器硬件。CDD 位于"复杂驱动层",可与 RTE、ECU 抽象层以及微控制器抽象层进行直接交互。
|
||||
</blockquote>
|
||||
|
||||
<p>CDD 的<strong>主要目标</strong>是:实现复杂的传感器评估与执行器控制,需要直接访问微控制器,使用特定的中断和/或复杂的微控制器外设、外部设备(通信收发器、ASIC 等),以满足特殊的<strong>功能需求和时序需求</strong>。</p>
|
||||
<p>此外,CDD 也可用于:</p>
|
||||
<ul>
|
||||
<li>实现增强的服务 / 协议;</li>
|
||||
<li>封装来自非 AUTOSAR 系统的遗留功能。</li>
|
||||
</ul>
|
||||
<p>CDD 的实现可能与<strong>应用、µC 和 ECU</strong>相关。</p>
|
||||
<p>最后,CDD 还可以作为一种<strong>迁移机制</strong>,将既有或新引入的概念纳入 AUTOSAR 软件架构。</p>
|
||||
|
||||
<h2 id="s6">6 CDD 设计建议(CDD design recommendations)</h2>
|
||||
<p>为便于 CDD 与 AUTOSAR 架构对接并简化集成,<strong>设计者应</strong>(shall)考虑以下几点。</p>
|
||||
|
||||
<h3 id="s6_1">6.1 文档(Documentations)</h3>
|
||||
|
||||
<h4 id="s6_1_1">6.1.1 用户手册(User's Manual)</h4>
|
||||
<p>CDD 设计者<strong>应当</strong>(shall)提供一份用户手册,以便于集成并向客户提供信息:</p>
|
||||
<ul>
|
||||
<li>CDD 介绍与概述;</li>
|
||||
<li>功能操作的描述(初始化、正常运行、关闭、故障运行等);</li>
|
||||
<li>与其他 BSW 模块、SchM(基础软件调度器)以及 RTE 的关系与依赖(如 NvM 提供的内存块、需要配置的临界区);</li>
|
||||
<li>文件结构与依赖关系;</li>
|
||||
<li>接口描述(含服务):名称、说明、可重入性、参数(名称、类型、范围、取值)、返回值(名称、类型、范围、取值)、配置类;</li>
|
||||
<li>非功能性需求描述:时序与行为需求、资源使用、与其它 BSW 模块或 SW-C 的交互行为;</li>
|
||||
<li>Dem 错误描述,可选的 Det 错误描述,调试变量;</li>
|
||||
<li>配置参数描述(名称、类型、范围、取值);</li>
|
||||
<li>内存映射需求描述(Flash、RAM);</li>
|
||||
<li>使用限制与未解决的问题;</li>
|
||||
<li>集成约束及对其他模块的需求;</li>
|
||||
<li>示例。</li>
|
||||
</ul>
|
||||
|
||||
<h5>6.1.1.1 模块 ID(Module ID)</h5>
|
||||
<p>CDD 的模块 ID 见文档 [2] <em>List of Basic Software Modules</em>。</p>
|
||||
|
||||
<h3 id="s6_2">6.2 实现(Implementation)</h3>
|
||||
<p>AUTOSAR 对 CDD 的实现约束较少,至少包括:</p>
|
||||
<ul>
|
||||
<li>CDD <strong>应当</strong>(shall)遵守输入规范 [3]、[4]、[5]、[6]、[7]、[8]、[9]、[10]。</li>
|
||||
<li>CDD <strong>应当</strong>(shall)保护其临界资源,定义可由 SchM 或 OS 机制处理的临界区。</li>
|
||||
<li>CDD 的模式可以由 EcuM 和 BswM 模块管理。</li>
|
||||
<li>CDD 可以使用内存映射机制处理其内存段。</li>
|
||||
<li>CDD 可以使用 Det 或 Dem 模块上报其错误。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s6_3">6.3 CDD 文件(CDD Files)</h3>
|
||||
<p>本节仅为建议,并未完整定义模块的文件结构。</p>
|
||||
|
||||
<h4 id="s6_3_1">6.3.1 源文件(Code file(s))</h4>
|
||||
<p>CDD 模块的源文件结构未做强制规定,但需满足文档 [4] <em>AUTOSAR General Requirements on Basic Software Modules</em> 和文档 [5] <em>General Specification on BSW modules</em> 中的要求。</p>
|
||||
<p>至少<strong>应当</strong>(shall)提供一个 <code>CDD_<MODULENAME>.c</code> 文件。</p>
|
||||
<p>中断函数可以放在 <code>CDD_<MODULENAME>_Irq.c</code> 文件中。</p>
|
||||
<p>回调(callout)函数可以放在 <code>CDD_<MODULENAME>_Callout.c</code> 文件中。</p>
|
||||
<p>根据需要,链接时(Link time)从配置生成的 C 对象可以放在 <code>CDD_<MODULENAME>_Lcfg.c</code> 文件中。</p>
|
||||
<p>根据需要,构建后(Post Build time)从配置生成的 C 对象可以放在 <code>CDD_<MODULENAME>_PBcfg.c</code> 文件中。</p>
|
||||
<p>若 CDD 模块的实现需要更多源文件,可自行加入。</p>
|
||||
|
||||
<h4 id="s6_3_2">6.3.2 头文件(Header file(s))</h4>
|
||||
<p>下图展示了 CDD 模块定义的 AUTOSAR 头文件层次结构。</p>
|
||||
<p>CDD 模块<strong>应当</strong>(shall)提供一种头文件结构,使得 CDD 模块的使用者仅需包含 <code>CDD_<MODULENAME>.h</code> 文件。</p>
|
||||
<p>如果存在需要由其他 BSW 模块处理的回调函数,CDD 模块<strong>可以</strong>(may)提供 <code>CDD_<MODULENAME>_Cbk.h</code> 头文件。</p>
|
||||
<p>根据需要,从配置生成的 C 对象声明可以放在 <code>CDD_<MODULENAME>_Cfg.h</code>、<code>CDD_<MODULENAME>_PBcfg.h</code>、<code>CDD_<MODULENAME>_Lcfg.h</code> 文件中。</p>
|
||||
<p>若 CDD 模块的实现需要更多头文件,可自行加入。头文件是自包含的(self-contained),即:它们<strong>应当</strong>(shall)包含自身所依赖的所有其他头文件。</p>
|
||||
<p>CDD 模块可以包含 <code>Det.h</code> 和/或 <code>Dem.h</code> 头文件用于错误上报。</p>
|
||||
<p>若需要定义内存映射区,CDD 模块可以包含 <code><Mip>_MemMap.h</code> 头文件,其中 <code><Mip></code> 是模块实现前缀(Module Implementation Prefix)。</p>
|
||||
<p>若配置了与 RTE 的接口,CDD 模块可以包含 <code>Rte_CDD_<MODULENAME>.h</code> 头文件。</p>
|
||||
|
||||
<h4 id="s6_3_3">6.3.3 推荐的文件结构(Recommended files structure)</h4>
|
||||
<p>下图展示了一个 CDD 模块的基本 AUTOSAR 头文件层次结构。</p>
|
||||
|
||||
<blockquote>
|
||||
<strong>图 6.3-1:CDD 的头文件结构</strong>
|
||||
<pre>
|
||||
CDD_<MODULENAME>.c → include → CDD_<MODULENAME>.h → Std_Types.h
|
||||
↘ Compiler.h
|
||||
↘ Platform_Types.h
|
||||
↘ CDD_<MODULENAME>_Cfg.h
|
||||
↘ <Mip>_MemMap.h
|
||||
↘ Det.h
|
||||
↘ Dem.h
|
||||
↘ Rte_CDD_<MODULENAME>.h
|
||||
↘ <MODULENAME>.h
|
||||
↘ CDD_<MODULENAME>_Cbk.h
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<h4 id="s6_3_4">6.3.4 一致性检查(Coherence checks)</h4>
|
||||
<p>CDD 模块<strong>应当</strong>(shall)避免集成不兼容的(.c 或 .h)文件,具体规则详见文档 [5] <em>General Specification on BSW modules</em>。</p>
|
||||
|
||||
<h3 id="s6_4">6.4 行为与接口描述(Behaviour and Interfaces description)</h3>
|
||||
<p>部分 CDD 不仅包含与其他 BSW 模块或集群的接口,还包含更抽象的接口——这些接口由应用层 SW-C 通过 RTE 访问。</p>
|
||||
<p>在这些场景下,需要一个 <strong>CDD SW-C 类型</strong> 来对接 RTE,且 CDD <strong>应当</strong>(shall)遵守文档 [9] <em>Specification of BSW Module Description Template</em> 中的要求。</p>
|
||||
<p>该描述文件应包含:</p>
|
||||
<ul>
|
||||
<li>CDD 服务的描述;</li>
|
||||
<li>类型与端口接口;</li>
|
||||
<li>内部行为与可运行实体(Runnable Entity)的描述;</li>
|
||||
<li>可运行实体所需触发事件的描述;</li>
|
||||
<li>用于共享资源保护的排他区(Exclusive Area)描述;</li>
|
||||
<li>内存映射。</li>
|
||||
</ul>
|
||||
<p>这里所需的高层抽象接口称为 <strong>AUTOSAR 接口(AUTOSAR Interface)</strong>,由软件组件模板(Software Component Template,SWCT)描述,包含端口、端口接口及其细节描述。</p>
|
||||
<p>SWCT 中用于描述 CDD 这些元素的根类为 <code>ComplexDeviceDriverSwComponentType</code>。</p>
|
||||
<p>从 RTE 到 CDD 的函数调用被建模为可运行实体(RunnableEntity),同样包含在 SWCT 中。SWCT 中用于描述可运行实体(及其他一些元素)的根类称为 <code>SwcInternalBehavior</code>。</p>
|
||||
|
||||
<blockquote>
|
||||
<strong>提示</strong>:CDD 的可运行实体的设计应尽量减少 RTE 开销,例如:
|
||||
<ul>
|
||||
<li>服务器端可运行实体应设计为<strong>可重入</strong>的:<code>can be invoked concurrently = TRUE</code>。</li>
|
||||
<li>可运行实体签名应为:<code>void</code> 或 <code>StdReturnType RunnableName(void or parameters)</code>。</li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
|
||||
<h3 id="s6_5">6.5 参数配置(Parameters configuration)</h3>
|
||||
<p>若需要使用 AUTOSAR 配置编辑器(GCE)配置参数,CDD <strong>应当</strong>(shall)遵守文档 [10] <em>Specification of ECU Configuration</em> 中的要求。</p>
|
||||
<p>至少包括:</p>
|
||||
<ul>
|
||||
<li>模块的 AUTOSAR 版本和软件版本<strong>应当</strong>(shall)由配置文件标识;</li>
|
||||
<li>生产阶段不应包含 Det,因此需要在配置中提供一个参数以禁用错误上报。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s7">7 与其他模块的接口(Interfacing to other modules)</h2>
|
||||
<p>本节描述 CDD 与基础软件中其他模块的关系。</p>
|
||||
|
||||
<h3 id="s7_1">7.1 与 RTE 和软件组件(SW-C)的接口</h3>
|
||||
<p>CDD 可能需要通过 RTE 与 SW-C 对接:</p>
|
||||
<ul>
|
||||
<li>必需端口(Required ports)和接口<strong>应当</strong>(shall)按照 AUTOSAR 标准(AUTOSAR 接口)进行规范与实现。</li>
|
||||
<li>某些情形下,CDD 需要使用 RTE 定义的某些端口专用参数。</li>
|
||||
</ul>
|
||||
<p>请参见前面的 6.4 节。</p>
|
||||
|
||||
<h3 id="s7_2">7.2 与库的接口(Interfacing to libraries)</h3>
|
||||
<p>CDD 可以使用 AUTOSAR 库。</p>
|
||||
<p><strong>示例</strong>:CDD 可以使用 E2E 库机制实现传输保护,防止数据损坏或丢失。</p>
|
||||
|
||||
<h3 id="s7_3">7.3 与标准 BSW 模块的接口(Interfacing to standard BSW modules)</h3>
|
||||
<p>CDD 可能需要与分层软件架构中的其他模块对接,反之亦然。若属于这种情况,应遵循以下建议:</p>
|
||||
|
||||
<p><strong>从分层软件架构模块访问 CDD</strong>:</p>
|
||||
<p>CDD <strong>应当</strong>(shall)提供可由访问方 AUTOSAR 模块以通用方式配置的接口。</p>
|
||||
<p>典型示例:PDU 路由器(PDU Router)——CDD 可以作为新总线系统的接口模块实现。这一点已在 PDU 路由器的配置中处理。</p>
|
||||
|
||||
<p><strong>从 CDD 访问分层软件架构模块</strong>:</p>
|
||||
<p>仅当分层软件架构中相应模块提供了接口,并准备好被 CDD 访问时才允许。通常这意味着:</p>
|
||||
<ul>
|
||||
<li>CDD <strong>应当</strong>(shall)关注接口的可重入性。对于非可重入接口,一次只能有一个调用方访问。对于条件可重入接口,若使用不同 id,则允许多个调用方并发访问。</li>
|
||||
<li>若使用回调函数,其名称应<strong>可以</strong>(shall/may)通过配置指定。</li>
|
||||
<li>不存在对该模块进行状态管理的上层模块(否则并发访问将变更状态但上层模块无法察觉)。</li>
|
||||
</ul>
|
||||
|
||||
<p>CDD <strong>应当</strong>(shall)提供所有必要的配置参数,以满足依赖这些信息的其他 AUTOSAR 模块的需求。例如:当调用 Dem 上报生产错误时,Dem 错误码必须按照 Dem 错误码定义的标准进行定义并在 CDD 配置中引用。</p>
|
||||
<p>对于多核架构,请参见 7.4 节。</p>
|
||||
<p>通常,可以访问以下模块:</p>
|
||||
|
||||
<h4 id="s7_3_1">7.3.1 与 MCAL 模块的接口</h4>
|
||||
<p>CDD 可以直接访问微控制器资源(例如硬件定时器)。若所需资源由 MCAL 模块管理且无特定约束(例如实时性需求),CDD 应使用 MCAL。<strong>强烈推荐</strong>这样做,以避免冲突(例如:对同一组/通道的并行访问通常不被允许,因为 DIO 服务不可重入)。</p>
|
||||
<p>此种情形下,CDD <strong>应当</strong>(shall)使用 MCAL 模块的标准 API 访问 MCAL 模块。</p>
|
||||
|
||||
<h4 id="s7_3_2">7.3.2 与 BSW 模式管理器和 ECU 状态管理器的接口</h4>
|
||||
<p>若使用了 ECU 状态管理器,<strong>EcuM 和 BSW 模式管理器</strong>应是模式管理的<strong>唯一入口</strong>。</p>
|
||||
<p><strong>ECU 状态管理器应</strong>(should)用于:</p>
|
||||
<ul>
|
||||
<li>初始化和去初始化函数<strong>应当</strong>(shall)只能由 EcuM 和/或 BswM 模块调用。</li>
|
||||
<li>若 CDD 处理一个唤醒源,必须遵循文档 [11] <em>Specification of ECU State Manager</em> 中规定的唤醒事件处理协议。</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>BSW 模式管理器应</strong>(should)用于:</p>
|
||||
<ul>
|
||||
<li>CDD 模式的变更管理;</li>
|
||||
<li>BswM(在主核上)确认 ECU 应被关闭,并将相应的模式切换分发到每个核。从核上的 CDD 必须捕获此模式切换,相应地进行去初始化,并向 BswM 发送适当的信号表明其就绪状态。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s7_3_3">7.3.3 与内存栈的接口</h4>
|
||||
<p>若内存由 CDD 独占管理,则允许绕过 NVRAM 管理器直接访问。若 CDD 使用标准内存栈,则 <strong>NVRAM 管理器</strong>是访问内存栈的<strong>唯一入口</strong>:CDD <strong>应当</strong>(shall)使用 NVM 的 API 访问内存。</p>
|
||||
|
||||
<h4 id="s7_3_4">7.3.4 与看门狗栈的接口</h4>
|
||||
<p>看门狗管理器可将 CDD 一个或多个可运行实体作为被监督实体进行监督。<strong>应当</strong>(shall)对看门狗管理器进行配置,且 CDD 的可运行实体<strong>应当</strong>(shall)按文档 [12] <em>Watchdog Manager</em> 的规定调用看门狗 API。</p>
|
||||
<p><strong>看门狗管理器</strong>是访问看门狗栈的<strong>唯一入口</strong>。</p>
|
||||
<p>CDD <strong>不应</strong>(should not)直接与看门狗管理器交互,而应通过 RTE 定义的端口进行。</p>
|
||||
<p>通常,RTE 负责将 CDD 中被监督实体的检查点(Checkpoint)信息传递给看门狗管理器。看门狗管理器使用 RTE 的服务,将监督状态的变化通知给 CDD。</p>
|
||||
<p>为控制 CDD 与状态相关的行为,RTE 提供"模式端口(mode port)"机制。模式管理器可在模式端口所定义的不同模式间切换。连接到模式端口的 CDD 可以以下两种方式使用模式信息:</p>
|
||||
<ul>
|
||||
<li>CDD 可通过模式端口查询当前模式;</li>
|
||||
<li>CDD 可声明由 RTE 在模式变化时启动或停止的可运行实体。</li>
|
||||
</ul>
|
||||
<p>出现故障时,看门狗管理器可通过 RTE 模式机制将监督故障通知 CDD 的被监督实体。被监督实体可据此采取恢复动作。</p>
|
||||
|
||||
<h4 id="s7_3_5">7.3.5 与通信栈的接口</h4>
|
||||
<p>有多个可能的访问入口:</p>
|
||||
<ul>
|
||||
<li>可以接入 PDU 路由器(PDU Router)模块以处理 IPDU;</li>
|
||||
<li>可以接入 <code><Bus></code> 接口模块;</li>
|
||||
<li>可以接入 NM 模块;</li>
|
||||
<li>可以接入 TcpIp 模块;</li>
|
||||
<li>可以直接接入 Com 模块(因为 Com 提供信号接口)。</li>
|
||||
</ul>
|
||||
<p>通常,<strong>不建议混用</strong>访问入口,即不应同时使用 PduR 接入和 Com 接入或 <code><Bus></code> 接口接入。</p>
|
||||
<p>负责通信并可能触发 PDU 发送的 CDD <strong>应当</strong>(shall)提供使能/禁止发送的 API。这将使 Dcm 等模块能够在诊断请求中禁用整个通信。这些由 CDD 提供的函数可以在与该函数关联的配置动作列表中被调用。参考通信栈中类似 API 的做法。</p>
|
||||
|
||||
<h5 id="s7_3_5_1">7.3.5.1 与 PDU 路由器的接口</h5>
|
||||
<p><strong>PDU 路由器(PduR)</strong>是访问通信栈 IPDU 的<strong>独立于总线和协议的入口</strong>。</p>
|
||||
<p>CDD <strong>应当</strong>(shall)使用 PduR 模块的标准 API 访问 IPDU。</p>
|
||||
<p>当 CDD 与 PduR 交互时,应在 PduR 中为每个 CDD 配置一个容器。</p>
|
||||
<p>详见文档 [19] <em>Specification of PDU Router</em>。</p>
|
||||
|
||||
<h5 id="s7_3_5_2">7.3.5.2 与 <code><Bus></code> 接口模块的接口</h5>
|
||||
<p><code><Bus></code> 接口模块是访问通信栈的<strong>总线特定入口</strong>。</p>
|
||||
<p>CDD <strong>应当</strong>(shall)使用 <code><Bus></code> 接口模块的标准 API 访问 IPDU。</p>
|
||||
<p>当 CDD 与 <code><Bus></code> 接口交互时,CDD 使用为 <code><Bus></code> 接口定义的访问函数,并应按 CDD 需求配置 <code><Bus></code> 接口回调函数。<code><Bus></code> 接口<strong>应当</strong>(shall)被配置为包含 <code>CDD_<MODULENAME>_Cbk.h</code> 头文件。</p>
|
||||
<p>详见 <code><BUS></code> 接口规范及用户手册。</p>
|
||||
|
||||
<h5 id="s7_3_5_3">7.3.5.3 与 Com 模块的接口</h5>
|
||||
<p>若 CDD 处理 Com 信号,CDD <strong>应当</strong>(shall)使用 Com 模块或 RTE 定义的标准 API 访问信号。</p>
|
||||
<p>详见文档 [20] <em>Specification of Communication</em>。</p>
|
||||
|
||||
<h5 id="s7_3_5_4">7.3.5.4 与 Com 管理器的接口</h5>
|
||||
<p>若 CDD 使用 Com 信号,CDD <strong>应当</strong>(shall)使用 Com 管理器的标准 API 请求"通信模式"。</p>
|
||||
<p>若 CDD 处理一个非 AUTOSAR 标准的 <code><Bus></code>,则 <code><Bus></code> 状态应由 ComM 处理以协调总线通信栈。</p>
|
||||
<p>详见文档 [21] <em>Specification of Communication Manager</em>。</p>
|
||||
|
||||
<h5 id="s7_3_5_5">7.3.5.5 与网络管理接口模块的接口</h5>
|
||||
<p>若 CDD 处理一个非 AUTOSAR 标准的 <code><Bus></code>,则 <code><Bus></code> 状态应由 <code><Bus>Nm_CDD</code> 模块处理。</p>
|
||||
<p><code><Bus>Nm_CDD</code> <strong>应当</strong>(shall)向网络管理器提供服务以管理 <code><Bus></code> 状态。</p>
|
||||
<p>详见文档 [22] <em>Specification of Network Management Interface</em>。</p>
|
||||
|
||||
<h5 id="s7_3_5_6">7.3.5.6 与 TcpIp 模块的接口</h5>
|
||||
<p><strong>TcpIp 模块</strong>是访问通信栈的<strong>基于 socket 的唯一入口</strong>。</p>
|
||||
<p>CDD <strong>应当</strong>(shall)使用 TcpIp 模块的标准 API 访问 socket。</p>
|
||||
<p>详见文档 [23] <em>Specification of TCP/IP Stack</em>。</p>
|
||||
|
||||
<h4 id="s7_3_6">7.3.6 与 XCP 模块的接口</h4>
|
||||
<p>若 CDD 处理一个非 AUTOSAR 标准的 <code><Bus></code>,XCP 可以接入 <code><Bus>_CDD</code> 以转发数据。</p>
|
||||
<p>XCP 模块提供可由 CDD 使用的可配置接口:</p>
|
||||
<ul>
|
||||
<li><code><Cdd_Transmit></code>:请求通过 CDD 发送一个 PDU;</li>
|
||||
<li><code><Xcp_CddTxConfirmation></code>:确认 PDU 成功发送的 API;</li>
|
||||
<li><code><Xcp_CddRxIndication></code>:CDD 调用的 API,指示成功接收一个 LPDU。</li>
|
||||
</ul>
|
||||
<p>XCP 模块<strong>应当</strong>(shall)被配置为允许 CDD 功能:应激活 <code>XcpOnCddEnabled</code> 参数。</p>
|
||||
<p>若需要,CDD <strong>可以</strong>(may)调用回调函数 <code>Xcp_<module>RxIndication</code>。</p>
|
||||
|
||||
<h4 id="s7_3_7">7.3.7 与诊断日志与跟踪(DLT)的接口</h4>
|
||||
<p>若 CDD 处理一个非 AUTOSAR 标准的 <code><Bus></code>,DLT 可以接入 <code><Bus>_CDD</code> 以转发数据。</p>
|
||||
<p>DLT 将数据转发给 Dcm 或使用串行接口的 CDD。</p>
|
||||
<p>DLT 未定义特定的通信接口。DLT 规范定义了到内部 DLT 通信模块的 API。如何实现该通信模块以及如何与可能的 CDD(例如 Serial 或 USB)通信,由实现者决定。</p>
|
||||
|
||||
<h4 id="s7_3_8">7.3.8 与默认错误追踪器(DET)和诊断事件管理器(DEM)的接口</h4>
|
||||
<p>CDD <strong>应当</strong>(shall)按文档 [16] <em>Description of the AUTOSAR standard errors</em> 的描述使用 Det、Dem 上报错误。</p>
|
||||
<p>CDD <strong>应当</strong>(shall)使用 Det 和 Dem 模块的标准 API。CDD 的反应应与其他 BSW 模块相同。错误 ID 在 CDD 模块内部定义,CDD 负责启动内部恢复。</p>
|
||||
|
||||
<h4 id="s7_3_9">7.3.9 与 OS 的接口</h4>
|
||||
<p>通常,只有 BSW 调度器(BSW Scheduler)和 RTE 应使用 OS 对象或 OS 服务。因此,CDD 应仅访问 OS 的 <code>GetCounterValue</code> 和 <code>GetElapsedCounterValue</code> 服务。</p>
|
||||
<p>只要所使用的 OS 对象未被其他 BSW 模块使用,OS 就可以被 CDD 访问,例如:CDD 可以创建一个 OS 报警并使用它。</p>
|
||||
<p>当 OS-Application 被终止并重启时,OS 可以通过 <code>OsRestartTask</code> 通知 CDD。CDD 须执行相应的清理动作。</p>
|
||||
<p>详见文档 [13] <em>Specification of Operating System</em>。</p>
|
||||
|
||||
<h4 id="s7_3_10">7.3.10 与 StbM 模块的接口</h4>
|
||||
<p>若 CDD 模块实现了一个用户自定义的 Timebase Provider,即它处理全局时间同步(Global Time Synchronization)消息,CDD 模块<strong>应当</strong>(shall)使用 StbM 模块的 API:</p>
|
||||
<ul>
|
||||
<li><code>StbM_GetCurrentTime</code>:从 StbM 读取最新的时间基准值;</li>
|
||||
<li><code>StbM_GetCurrentTimeRaw</code>、<code>StbM_GetCurrentTimeDiff</code>:计算时间基准值的更新;</li>
|
||||
<li><code>StbM_BusSetGlobalTime</code>:将总线上接收到的时间基准值转发到 StbM。</li>
|
||||
</ul>
|
||||
<p>此接口当前仅限于<strong>无硬件时间戳</strong>的 Timebase Provider。API 详情请参见文档 [24] <em>Specification of Synchronized Time Base Manager</em>。</p>
|
||||
<p>全局时间同步相关 CDD 配置项在 CDD 模块定义中由容器 <code>CddGlobalTimeContribution</code> 指定。请参见文档 [10] <em>Specification of the ECU Configuration</em>。</p>
|
||||
|
||||
<h3 id="s7_4">7.4 多核系统中的 CDD(CDD in multi-cores system)</h3>
|
||||
<p>CDD 可用于多核架构。</p>
|
||||
<p>在多核架构中,CDD 可以驻留在任何核上,但需遵守以下规则:</p>
|
||||
<ul>
|
||||
<li>跨越分区(partition)和核边界的通信仅允许用于<strong>模块内部通信</strong>,应使用主/卫星(master/satellite)实现方式。</li>
|
||||
<li>因此,若 CDD 需要访问 BSW 的标准化接口,它必须驻留在同一核上。</li>
|
||||
<li>若 CDD 驻留在不同的核上,它可以使用普通端口机制访问 AUTOSAR 接口和标准化的 AUTOSAR 接口。这会调用 RTE,RTE 使用操作系统的 IOC 机制将请求传递到其他核。</li>
|
||||
<li>然而,若 CDD 需要访问 BSW 的标准化接口但又不在同一核上:
|
||||
<ul>
|
||||
<li>可以在 CDD 所在核上运行一个提供该标准化接口的卫星(satellite),将调用转发到另一核;</li>
|
||||
<li>或者在另一核上实现 CDD 的 stub 部分,并使用操作系统的 IOC 机制(类似于 RTE 的做法)以 CDD 局部方式组织通信。</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>此外,在后一种情况下,CDD 的初始化部分也必须驻留在另一核上的 stub 部分中。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s7_5">7.5 作为 MCAL 模块的 CDD(CDD module of the MCAL)</h3>
|
||||
<p>可以为微控制器驱动编写 CDD,但与处于更低层的普通 CDD 不同,它<strong>不能</strong>访问其他标准模块,例外仅包括 Det、Dem、SchM 等。</p>
|
||||
<p>通常,若对某一特定层施加了某些限制,则这些限制同样适用于 CDD。</p>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>术语一致性</strong>:CDD、RTE、SW-C、PDU、ISR、IETF、EcuM、BswM、NvM、StbM、Dem、Det、SchM 等核心术语已与 <a href="../glossary.html">术语表</a> 保持一致;首次出现按"中文(英文, 缩写)"形式呈现。</li>
|
||||
<li>✅ <strong>章节结构</strong>:原文共 7 章,含 25+ 子节,译文目录完整对应(1–7 章;6.1.1、6.3.1–6.3.4、7.3.1–7.3.10、7.3.5.1–7.3.5.6 全保留)。</li>
|
||||
<li>✅ <strong>RFC 2119 关键字</strong>:<code>SHALL</code>、<code>SHALL NOT</code>、<code>MUST</code>、<code>MUST NOT</code>、<code>SHOULD</code>、<code>SHOULD NOT</code>、<code>MAY</code>、<code>REQUIRED</code>、<code>RECOMMENDED</code>、<code>OPTIONAL</code> 全部保留为英文,并在首次出现时附中文释义。</li>
|
||||
<li>✅ <strong>保留不译标识符</strong>:所有 API 名(<code>EcuM_Init</code>、<code>Dem_ReportErrorStatus</code> 等)、文件名(<code>CDD_<MODULENAME>.c</code>、<code>Det.h</code> 等)、容器/类名(<code>ComplexDeviceDriverSwComponentType</code>、<code>SwcInternalBehavior</code>、<code>CddGlobalTimeContribution</code>)、参数(<code>XcpOnCddEnabled</code>、<code>can be invoked concurrently</code>)完整保留。</li>
|
||||
<li>✅ <strong>表格</strong>:原文 2 个局部术语表 + 24 项参考文档清单,全部按原文结构翻译为 HTML 表格(行数与列数与原文一致)。</li>
|
||||
<li>✅ <strong>图示</strong>:原文两张 UML/层次图(图 4.2-1、图 6.3-1)以文字块 + ASCII 结构图方式保留内容,未丢失信息。</li>
|
||||
<li>✅ <strong>页眉/页脚</strong>:原文中重复的"AUTOSAR confidential"、"X of Y / Document ID 622"页脚已省略;保留文档元信息块在页头。</li>
|
||||
<li>⚠ <strong>UML 图细节</strong>:原图 6.3-1 中各箭头方向(include/source)已在 ASCII 图中以 <code>→</code> 与 <code>↘</code> 简化标注;如需精确还原可后续补充为 SVG。</li>
|
||||
<li>⚠ <strong>旧引用 [12]</strong>:原文 Watchdog Manager 文件名为 <code>AUTOSAR_SWS_Watchdog Manager.pdf</code>(带空格,可能为笔误),译文保留原文不做更改。</li>
|
||||
<li>✅ <strong>免责声明</strong>:按惯例省略,原文免责声明是法律性样板文本。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf(21 页)· 文档 ID 622
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,658 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>AUTOSAR 标准错误描述 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>AUTOSAR 标准错误描述(Description of the AUTOSAR standard errors)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:377</span>
|
||||
<span>🏷 类型:EXP(说明文档)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:79</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_EXP_ErrorDescription.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 目的</a></li>
|
||||
<li><a href="#s2">2 与其他文档的关系</a></li>
|
||||
<li><a href="#s3">3 文档导读</a></li>
|
||||
<li><a href="#s4">4 通用机制</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 上报给 DEM(诊断事件管理器)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 通信相关错误</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 概述</a></li>
|
||||
<li><a href="#s5_2">5.2 通信信道丢失</a>
|
||||
<ul>
|
||||
<li><a href="#s5_2_1">5.2.1 CAN Bus Off</a></li>
|
||||
<li><a href="#s5_2_2">5.2.2 CAN 控制器硬件超时</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5_3">5.3 信号错误</a>
|
||||
<ul>
|
||||
<li><a href="#s5_3_1">5.3.1 CAN 发送缓冲区满</a></li>
|
||||
<li><a href="#s5_3_2">5.3.2 CAN 接收 DLC 错误</a></li>
|
||||
<li><a href="#s5_3_3">5.3.3 COM RX 截止期监控</a></li>
|
||||
<li><a href="#s5_3_4">5.3.4 COM TX 截止期监控</a></li>
|
||||
<li><a href="#s5_3_5">5.3.5 CAN TP 发送错误</a></li>
|
||||
<li><a href="#s5_3_6">5.3.6 CAN TP 接收错误</a></li>
|
||||
<li><a href="#s5_3_7">5.3.7 CANNM TX 截止期监控</a></li>
|
||||
<li><a href="#s5_3_8">5.3.8 PDU 复制错误</a></li>
|
||||
<li><a href="#s5_3_9">5.3.9 PDU 计数器错误</a></li>
|
||||
<li><a href="#s5_3_10">5.3.10 客户端/服务器超时</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 NVRAM 相关错误</a>
|
||||
<ul>
|
||||
<li><a href="#s6_1">6.1 概述</a></li>
|
||||
<li><a href="#s6_2">6.2 驱动级错误</a>
|
||||
<ul>
|
||||
<li><a href="#s6_2_1">6.2.1 Flash 写操作错误</a></li>
|
||||
<li><a href="#s6_2_2">6.2.2 Flash 擦除操作错误</a></li>
|
||||
<li><a href="#s6_2_3">6.2.3 Flash 读操作错误</a></li>
|
||||
<li><a href="#s6_2_4">6.2.4 Flash 比较操作错误</a></li>
|
||||
<li><a href="#s6_2_5">6.2.5 外部 Flash 硬件 ID 不匹配</a></li>
|
||||
<li><a href="#s6_2_6">6.2.6 EEPROM 写操作错误</a></li>
|
||||
<li><a href="#s6_2_7">6.2.7 EEPROM 擦除操作错误</a></li>
|
||||
<li><a href="#s6_2_8">6.2.8 EEPROM 读操作错误</a></li>
|
||||
<li><a href="#s6_2_9">6.2.9 EEPROM 比较操作错误</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6_3">6.3 EEPROM 抽象/Flash 仿真级错误</a>
|
||||
<ul>
|
||||
<li><a href="#s6_3_1">6.3.1 FEE 一致性检查错误</a></li>
|
||||
<li><a href="#s6_3_2">6.3.2 EA 一致性检查错误</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6_4">6.4 NVRAM 管理器级错误</a>
|
||||
<ul>
|
||||
<li><a href="#s6_4_1">6.4.1 NVM CRC 检查</a></li>
|
||||
<li><a href="#s6_4_2">6.4.2 NVM 写验证错误</a></li>
|
||||
<li><a href="#s6_4_3">6.4.3 静态块检查错误</a></li>
|
||||
<li><a href="#s6_4_4">6.4.4 冗余丢失</a></li>
|
||||
<li><a href="#s6_4_5">6.4.5 NVM API 请求失败</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 目的(Purpose)</h2>
|
||||
<p>本文档的目的:</p>
|
||||
<ul>
|
||||
<li>给出 BSW 异常行为的概述(不限于单个模块);</li>
|
||||
<li>澄清错误处理机制,以保证任何 BSW 实现具有相同的行为,并允许更安全地交换模块;</li>
|
||||
<li>列出为应用软件提供的 BSW 机制,并可能指出需要补充的不足;</li>
|
||||
<li>从安全分析的角度,给出不同机制对失效模式的检测和恢复覆盖情况。</li>
|
||||
</ul>
|
||||
<p>本文档面向 BSW 模块开发者和应用/SW-C 开发者。</p>
|
||||
<p>本文档描述了 AUTOSAR 基础软件处理的<strong>所有现有错误</strong>,以及架构根据 FDIR(故障、检测、隔离与恢复)过程对这些错误的反应方式。</p>
|
||||
<p>本文档还描述了每种现有错误处理机制对已识别失效模式的覆盖。假设失效模式是与硬件相关的<strong>随机失效</strong>。用于检测这些硬件失效的软件机制也可能检测出 SW(设计)故障。这些机制被映射到失效模式列表,并评估其在检测和恢复程度方面的效果。</p>
|
||||
|
||||
<p><strong>限制</strong>:目前,本文档的范围仅限于 <strong>CAN 通信栈</strong>和<strong>内存栈</strong>。</p>
|
||||
<p>本文档仅为<strong>描述性</strong>,不包含需求。基础软件模块的功能和需求在相应的规范文档中规定。</p>
|
||||
<p>本文档仅描述 AUTOSAR 架构中包含的<strong>标准错误</strong>。可以因特定实现和/或特定硬件特性添加特定错误。</p>
|
||||
|
||||
<h2 id="s2">2 与其他文档的关系(Relation to other documents)</h2>
|
||||
<p>本文档与 AUTOSAR 发布的许多其他文档相关。本文档的目的不是替代其他文档,而是提供 BSW 中错误处理的<strong>完整视图</strong>。因此本文档与其他文档之间存在<strong>相当数量的重叠</strong>。注意:本文档仅为描述性,<strong>不包含需求</strong>。</p>
|
||||
|
||||
<h2 id="s3">3 文档导读(Guide to the document)</h2>
|
||||
<p>以下章节的内容摘要:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>第 4 章:通用机制</strong>:描述通用的错误处理机制。</li>
|
||||
<li><strong>第 5 章:通信相关错误</strong>:
|
||||
<ul>
|
||||
<li>5.1 概述:通信栈中现有错误处理机制概述,以及每种机制到已识别失效模式的映射;</li>
|
||||
<li>5.X:精确描述通信栈中每种错误的 AUTOSAR 架构行为。</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>第 6 章:内存相关错误</strong>:
|
||||
<ul>
|
||||
<li>6.1 概述:内存栈中现有错误处理机制概述,以及每种机制到已识别失效模式的映射;</li>
|
||||
<li>6.X:精确描述内存栈中每种错误的 AUTOSAR 架构行为。</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>对于每个错误:</p>
|
||||
<ul>
|
||||
<li>一张图呈现该错误的信息流概要,并指出错误在哪里被检测、缓解或恢复;</li>
|
||||
<li>每个模块的表格详细列出错误处理的具体项:</li>
|
||||
</ul>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测(Detection)</strong></td><td>描述模块如何检测或被通知此错误情况</td></tr>
|
||||
<tr><td><strong>反应(Reaction)</strong></td><td>指示模块的内部反应(如内部状态变化)</td></tr>
|
||||
<tr><td><strong>报告(Report)</strong></td><td>指示如何将错误通知给栈中的其他模块或 AUTOSAR 基础架构</td></tr>
|
||||
<tr><td><strong>恢复(Recovery)</strong></td><td>指示如何/是否由模块恢复或缓解错误</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s4">4 通用机制(Generic Mechanisms)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 上报给 DEM(诊断事件管理器)(Report to the Diagnostic Event Manager (DEM))</h3>
|
||||
|
||||
<h4 id="s4_1_1">4.1.1 概要(Summary)</h4>
|
||||
<p>DEM(Diagnostic Event Manager)是 AUTOSAR 中<strong>集中管理</strong>生产错误和扩展生产错误的 BSW 模块。所有 BSW 模块和 SW-C 都应通过 DEM 上报此类错误。</p>
|
||||
|
||||
<h4 id="s4_1_2">4.1.2 模块的角色(Roles of the modules)</h4>
|
||||
<p>在错误处理过程中,各模块的角色:</p>
|
||||
<ul>
|
||||
<li><strong>检测模块</strong>:检测到错误并调用 DEM 接口;</li>
|
||||
<li><strong>DEM</strong>:接收错误事件,根据配置的<strong>去抖(debounce)算法</strong>确定事件状态(passed/failed/prepassed),并存储事件信息;</li>
|
||||
<li><strong>FIM(Function Inhibition Manager)</strong>:根据 DEM 的事件状态,决定是否禁用某些功能;</li>
|
||||
<li><strong>DCM(Diagnostic Communication Manager)</strong>:响应外部诊断请求(如 UDS)读取 DEM 中的错误状态。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s5">5 通信相关错误(Communication related errors)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 概述(Overview)</h3>
|
||||
|
||||
<h4 id="s5_1_1">5.1.1 错误处理机制(Error handling mechanisms)</h4>
|
||||
<p>CAN 通信栈的错误处理机制包括:</p>
|
||||
<ul>
|
||||
<li>硬件错误检测(如 CAN 控制器 Bus Off);</li>
|
||||
<li>协议错误检测(如 DLC 不匹配、传输协议错误);</li>
|
||||
<li>时间监控(如 Deadline Monitoring);</li>
|
||||
<li>数据一致性检查(如 PDU counter、CRC);</li>
|
||||
<li>通信状态管理(如 NM 状态机)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s5_1_2">5.1.2 CAN 栈的错误列表(Error list for CAN stack)</h4>
|
||||
<p>本章详细描述的 CAN 通信错误包括:</p>
|
||||
<ul>
|
||||
<li>CAN Bus Off</li>
|
||||
<li>CAN 控制器硬件超时</li>
|
||||
<li>CAN 发送缓冲区满</li>
|
||||
<li>CAN 接收 DLC 错误</li>
|
||||
<li>COM RX/TX Deadline Monitoring</li>
|
||||
<li>CAN TP 发送/接收错误</li>
|
||||
<li>CAN NM TX Deadline Monitoring</li>
|
||||
<li>PDU 复制/计数器错误</li>
|
||||
<li>客户端/服务器超时</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s5_1_3">5.1.3 EH 机制到硬件失效模式的映射(Mappings of EH mechanisms to hardware failure modes)</h4>
|
||||
<p>每种错误处理机制对硬件失效模式的覆盖情况详见原文 5.1.3 节表格。</p>
|
||||
|
||||
<h3 id="s5_2">5.2 通信信道丢失(Loss of communication channel)</h3>
|
||||
|
||||
<h4 id="s5_2_1">5.2.1 CAN Bus Off</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:当 CAN 控制器检测到<strong>过多的发送错误</strong>(通常为 255 个 TEC)时,控制器进入 Bus Off 状态,停止参与总线通信。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CAN 控制器硬件检测 TEC 计数达到 255,触发 Bus Off 状态。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CAN 驱动器(CanDrv)进入 Bus Off 状态,停止发送;CanIf 通知 CanSM。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>CanSM 上报 Bus Off 状态至 ComM 和 BswM;CanDrv 上报 <code>CAN_E_BUSOFF</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>等待恢复时间后,CanDrv 尝试重新初始化 CAN 控制器(通常 250ms);成功后恢复正常通信;失败后由 CanSM 决定是继续重试还是切到 No Communication 状态。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_2_2">5.2.2 CAN 控制器硬件超时(CAN Controller Hardware Timeout)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:当 CAN 控制器长时间<strong>不响应</strong>CPU 的访问时发生硬件超时。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanDrv 通过超时机制(轮询或中断)检测控制器不响应。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CanDrv 报告错误,禁用 CAN 控制器。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>CanDrv 上报 <code>CAN_E_TIMEOUT</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>EcuM 重启 CAN 控制器或整个 ECU。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s5_3">5.3 信号错误(Signal error)</h3>
|
||||
|
||||
<h4 id="s5_3_1">5.3.1 CAN 发送缓冲区满(CAN Transmission buffer full)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:当所有 CAN 发送硬件缓冲区(Mailbox)都被占用时,新请求无法入队。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanDrv 尝试入队发送请求时无可用 Mailbox。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CanDrv 返回 <code>CAN_BUSY</code> 给调用者(CanIf)。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>可选地上报至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>调用者根据上层策略决定:重试、丢弃、或触发应用层错误处理。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_2">5.3.2 CAN 接收 DLC 错误(CAN Reception DLC error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:接收到的 PDU 的 DLC 与配置值不匹配。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanIf 比较接收的 DLC 与配置值。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>可选地拒绝该 PDU 或按配置的 DLC 处理。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>CAN_E_DLC_ERROR</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>无自动恢复;可通过配置或应用层处理。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_3">5.3.3 COM RX 截止期监控(COM RX Deadline Monitoring)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:未在配置的截止期内接收到预期的信号。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>COM 模块维护每个 RX 信号的接收时间戳,超时则触发监控。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>COM 标记信号为 <code>EXPIRED</code> 状态。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>可选地上报 <code>COM_E_MONITORING</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>应用层读取信号时检查 <code>EXPIRED</code> 状态;下次成功接收自动清除。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_4">5.3.4 COM TX 截止期监控(COM TX Deadline Monitoring)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:信号未在配置的截止期内成功发送。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>COM 模块维护每个 TX 信号的发送时间戳,超时则触发监控。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>COM 记录超时;可选地触发应用通知。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>可选地上报至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>下次成功发送自动清除。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_5">5.3.5 CAN TP 发送错误(CAN Transport Protocol error during transmission)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:多帧(TP)数据传输过程中发生协议错误。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanTp 检测超时、流控制(FC)错误、序列号错误等。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CanTp 终止传输并释放资源。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>CANTP_E_*</code> 至 Dem;通知 PduR。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>调用者(上层)根据应用策略决定重试或取消。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_6">5.3.6 CAN TP 接收错误(CAN Transport Protocol error during reception)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:多帧(TP)数据接收过程中发生协议错误。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanTp 检测超时、CF 序列错误等。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CanTp 终止接收并释放缓冲区。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>CANTP_E_*</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>调用者根据应用策略决定。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_7">5.3.7 CAN NM TX 截止期监控(CANNM TX Deadline Monitoring)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:NM(网络管理)消息未在截止期内成功发送。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>CanNm 检测 NM 消息发送超时。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>CanNm 通知应用层 NM 状态变化。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>CANNM_E_*</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>CanNm 切换到错误状态或重试。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_8">5.3.8 PDU 复制错误(PDU replication error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:同一 PDU 在传输层被复制(duplicate)。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>接收端通过 PDU 计数器或 E2E 机制检测复制。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>接收端丢弃重复 PDU。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>通过 E2E 库上报。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>无自动恢复;可通过重传请求恢复。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_9">5.3.9 PDU 计数器错误(PDU counter error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:PDU 计数器的值与预期不连续(丢失、乱序)。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>接收端通过 PDU 计数器检测丢失或乱序。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>接收端标记 PDU 序列错误。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>通过 E2E 库上报。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>无自动恢复;可能需要应用层重传。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s5_3_10">5.3.10 客户端/服务器超时(Client / Server timeout)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:客户端调用服务器操作,在截止期内未收到响应。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>RTE 维护调用的超时计时。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>RTE 返回 <code>RTE_E_TIMEOUT</code> 给调用者。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>可选地上报至 Det。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>调用者根据应用策略决定重试或处理错误。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s6">6 NVRAM 相关错误(NVRAM related errors)</h2>
|
||||
|
||||
<h3 id="s6_1">6.1 概述(Overview)</h3>
|
||||
|
||||
<h4 id="s6_1_1">6.1.1 错误处理机制(Error handling mechanisms)</h4>
|
||||
<p>NVRAM 栈的错误处理机制包括:</p>
|
||||
<ul>
|
||||
<li>Flash/EEPROM 驱动器级错误检测;</li>
|
||||
<li>FEE/EA 一致性检查;</li>
|
||||
<li>NVM 校验和验证;</li>
|
||||
<li>冗余数据保护(Block 副本);</li>
|
||||
<li>静默校验(static block check)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s6_1_2">6.1.2 NVRAM 栈的错误列表(Error list for NVRAM stack)</h4>
|
||||
<p>本章详细描述的 NVRAM 错误包括:</p>
|
||||
<ul>
|
||||
<li>Flash 写/擦除/读/比较错误</li>
|
||||
<li>外部 Flash 硬件 ID 不匹配</li>
|
||||
<li>EEPROM 写/擦除/读/比较错误</li>
|
||||
<li>FEE/EA 一致性检查错误</li>
|
||||
<li>NVM CRC 检查错误</li>
|
||||
<li>NVM 写验证错误</li>
|
||||
<li>静态块检查错误</li>
|
||||
<li>冗余丢失</li>
|
||||
<li>NVM API 请求失败</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s6_1_3">6.1.3 EH 机制到 NVRAM 硬件失效模式的映射(Mappings of EH mechanisms to NVRAM hardware failure modes)</h4>
|
||||
<p>每种错误处理机制对 NVRAM 硬件失效模式的覆盖情况详见原文 6.1.3 节表格。</p>
|
||||
|
||||
<h3 id="s6_2">6.2 驱动级错误(Driver level errors)</h3>
|
||||
|
||||
<h4 id="s6_2_1">6.2.1 Flash 写操作错误(Flash write job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:Flash 写操作因硬件错误(如电压异常、坏块)失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Flash 驱动(Fls)检测硬件错误状态寄存器。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fls 返回 <code>MEMIF_JOB_FAILED</code>,终止当前写操作。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FLS_E_WRITE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>Fee/EA 检查坏块状态;标记坏块;重试其他块或块组。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_2">6.2.2 Flash 擦除操作错误(Flash erase job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:Flash 擦除操作失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Fls 检测擦除错误状态。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fls 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FLS_E_ERASE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>标记坏块;切换到备份扇区(若配置)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_3">6.2.3 Flash 读操作错误(Flash read job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:Flash 读取失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Fls 检测读取错误或返回非法值。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fls 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FLS_E_READ_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>从冗余副本恢复;否则数据丢失。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_4">6.2.4 Flash 比较操作错误(Flash compare job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:Flash 比较结果不匹配。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Fls 在写入后比较,发现数据不一致。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fls 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FLS_E_COMPARE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>重写或标记坏块。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_5">6.2.5 外部 Flash 硬件 ID 不匹配(External Flash Hardware ID Mismatch)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:外部 Flash 的硬件 ID 与配置不一致。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Fls 初始化时读取 JEDEC ID,与配置比较。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fls 初始化失败。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FLS_E_HW_ID_MISMATCH</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>EcuM 决定是否使用默认配置或停用 NVRAM 服务。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_6">6.2.6 EEPROM 写操作错误(EEPROM write job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:EEPROM 写操作失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Eep 检测硬件错误状态。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Eep 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>EEP_E_WRITE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>重试或上报应用层。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_7">6.2.7 EEPROM 擦除操作错误(EEPROM erase job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:EEPROM 擦除操作失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Eep 检测擦除错误状态。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Eep 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>EEP_E_ERASE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>应用层处理。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_8">6.2.8 EEPROM 读操作错误(EEPROM read job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:EEPROM 读取失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Eep 检测读取错误或异常值。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Eep 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>EEP_E_READ_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>从冗余副本恢复。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_2_9">6.2.9 EEPROM 比较操作错误(EEPROM compare job error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:EEPROM 比较结果不匹配。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Eep 在写入后比较,发现数据不一致。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Eep 返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>EEP_E_COMPARE_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>重写或上报。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s6_3">6.3 EEPROM 抽象/Flash 仿真级错误(EEPROM Abstraction / Flash Emulation level errors)</h3>
|
||||
|
||||
<h4 id="s6_3_1">6.3.1 FEE 一致性检查错误(FEE consistency check error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:FEE(Flash EEPROM Emulation)的一致性检查失败,Flash 中的数据可能损坏。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Fee 启动时遍历所有块,检查其一致性。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Fee 标记不一致的块;返回 <code>MEMIF_JOB_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>FEE_E_INCONSISTENT_BLOCK</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>NvM 决定使用默认值、备份副本或标记块无效。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_3_2">6.3.2 EA 一致性检查错误(EA consistency check error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:EA(EEPROM Abstraction)的一致性检查失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>Ea 启动时检查数据布局。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>Ea 标记不一致的块。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>EA_E_INCONSISTENT_BLOCK</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>NvM 使用默认值或备份。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s6_4">6.4 NVRAM 管理器级错误(NVRAM manager level errors)</h3>
|
||||
|
||||
<h4 id="s6_4_1">6.4.1 NVM CRC 检查(NVM CRC check)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:NvM 块读取时 CRC 校验失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>NvM 比较存储的 CRC 与计算的 CRC。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>NvM 设置 <code>NVM_REQ_INTEGRITY_FAILED</code> 状态。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>NVM_E_INTEGRITY_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>从冗余块恢复;使用默认值;标记块无效。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_4_2">6.4.2 NVM 写验证错误(NVM write verification error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:NvM 写入后验证失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>NvM 在写操作后比较数据。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>NvM 标记写失败。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>NVM_E_VERIFY_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>重写或标记块无效。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_4_3">6.4.3 静态块检查错误(Static block check error)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:静态块(写一次,多次读)的检查失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>NvM 在启动时验证静态块的一致性。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>NvM 设置 <code>NVM_REQ_STATIC_BLOCK_CHECK_FAILED</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>NVM_E_STATIC_BLOCK_CHECK_FAILED</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>从冗余副本恢复;标记块错误。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_4_4">6.4.4 冗余丢失(Loss of redundancy)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:NVRAM 块的冗余副本丢失。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>NvM 在启动时检测冗余副本数量。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>NvM 设置 <code>NVM_REQ_REDUNDANCY_LOST</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>上报 <code>NVM_E_LOSS_OF_REDUNDANCY</code> 至 Dem。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>应用层决定是否继续运行(已无冗余保护)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h4 id="s6_4_5">6.4.5 NVM API 请求失败(NVM API request failure)</h4>
|
||||
|
||||
<p><strong>错误描述</strong>:NVM API 调用因内部状态错误而失败。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>项</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><strong>检测</strong></td><td>NvM 检测参数无效、内部状态不一致等。</td></tr>
|
||||
<tr><td><strong>反应</strong></td><td>NvM 返回 <code>E_NOT_OK</code>。</td></tr>
|
||||
<tr><td><strong>报告</strong></td><td>可选地上报至 Det。</td></tr>
|
||||
<tr><td><strong>恢复</strong></td><td>调用者根据错误原因处理。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 6 章 + 30+ 子节,译文目录完整对应(1–6 章;4.1、5.1–5.3、6.1–6.4 及子节)。</li>
|
||||
<li>✅ <strong>错误处理框架</strong>:FDIR(检测/反应/报告/恢复)四元组在每个错误表格中保留。</li>
|
||||
<li>✅ <strong>通信栈错误</strong>:5.1–5.3 节共 12 个 CAN 错误全部翻译(Bus Off、硬件超时、DLC 错误、TP 错误、Deadline Monitoring、PDU 复制/计数、客户端/服务器超时等)。</li>
|
||||
<li>✅ <strong>NVRAM 栈错误</strong>:6.1–6.4 节共 15 个 NVRAM 错误全部翻译(Flash/EEPROM 驱动级、FEE/EA 一致性、NVM CRC/验证/冗余/静态块)。</li>
|
||||
<li>✅ <strong>API 与状态保留</strong>:<code>CAN_BUSY</code>、<code>MEMIF_JOB_FAILED</code>、<code>E_NOT_OK</code>、<code>RTE_E_TIMEOUT</code>、<code>EXPIRED</code> 等状态码完整保留。</li>
|
||||
<li>✅ <strong>错误码名称</strong>:<code>CAN_E_BUSOFF</code>、<code>CANTP_E_*</code>、<code>FLS_E_WRITE_FAILED</code>、<code>NVM_E_INTEGRITY_FAILED</code>、<code>DEM_*</code> 等完整保留。</li>
|
||||
<li>✅ <strong>术语对照</strong>:DEM、DCM、Det、FIM、CanDrv、CanIf、CanSM、CanNm、ComM、BswM、EcuM、NvM、Fee、Ea、Fls、Eep、CanTp、PduR 与术语表对齐。</li>
|
||||
<li>⚠ <strong>失效模式映射表省略</strong>:5.1.3、6.1.3 节的详细"机制 × 失效模式"映射表以文字描述代替,完整 200+ 行表格可查阅原文 PDF。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_EXP_ErrorDescription.pdf(79 页)· 文档 ID 377
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,516 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>AUTOSAR 中断处理说明 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>AUTOSAR 中断处理说明(Explanation of Interrupt Handling within AUTOSAR)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:307</span>
|
||||
<span>🏷 类型:EXP(说明文档)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:22</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_EXP_InterruptHandlingExplanation.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与文档目的</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a>
|
||||
<ul>
|
||||
<li><a href="#s3_1">3.1 输入文档</a></li>
|
||||
<li><a href="#s3_2">3.2 相关标准与规范</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s4">4 中断配置概述</a></li>
|
||||
<li><a href="#s5">5 中断操作概述</a>
|
||||
<ul><li><a href="#s5_1">5.1 Cat1 与 Cat2 中断的区别</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 中断操作的步骤</a>
|
||||
<ul>
|
||||
<li><a href="#s6_1">6.1 Cat1 中断的处理</a>
|
||||
<ul>
|
||||
<li><a href="#s6_1_1">6.1.1 初始状态</a></li>
|
||||
<li><a href="#s6_1_2">6.1.2 硬件请求中断时</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6_2">6.2 Cat2 中断的处理</a>
|
||||
<ul>
|
||||
<li><a href="#s6_2_1">6.2.1 初始状态</a></li>
|
||||
<li><a href="#s6_2_2">6.2.2 硬件请求中断时</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7">7 中断的配置</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1">7.1 设备驱动的配置与代码</a>
|
||||
<ul><li><a href="#s7_1_1">7.1.1 中断处理程序的放置</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s7_2">7.2 OS 配置</a></li>
|
||||
<li><a href="#s7_3">7.3 BSW 调度器配置</a>
|
||||
<ul>
|
||||
<li><a href="#s7_3_1">7.3.1 主函数的 TASK</a></li>
|
||||
<li><a href="#s7_3_2">7.3.2 栈中的其他 TASK</a></li>
|
||||
<li><a href="#s7_3_3">7.3.3 临界区</a></li>
|
||||
<li><a href="#s7_3_4">7.3.4 小结</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8">8 Cat1 中断的使用建议</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1_1">8.1.1 使用 Cat1 中断的相邻模块通信</a></li>
|
||||
<li><a href="#s8_1_2">8.1.2 信任</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与文档目的(Introduction and purpose of document)</h2>
|
||||
<p>本文档阐述了中断在 AUTOSAR 中的工作方式及其配置方法。文档的目的是为那些以某种方式与中断交互的模块规范工作提供指导。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>ISR</td><td>Interrupt Service Routine(中断服务程序)。在 C 语言中也作为宏用于声明 Cat2 中断服务程序。</td></tr>
|
||||
<tr><td>RETI</td><td>Return from Interrupt(中断返回)</td></tr>
|
||||
<tr><td>GCE</td><td>Generic Configuration Editor(通用配置编辑器)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩写</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Cat2</td><td>Category 2(类别 2)。Cat2 ISR 由 OS 支持,可以调用大部分 OS 服务。</td></tr>
|
||||
<tr><td>Cat1</td><td>Category 1(类别 1)。Cat1 中断<strong>不</strong>由 OS 支持,<strong>只能</strong>调用极少量的 OS 服务(使能和禁止全部中断)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>术语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Interrupt Handler(中断处理程序)</td><td>对 Cat2 中断而言,ISR 与 Interrupt Handler 同义。对 Cat1 中断而言,Interrupt Handler 是由硬件中断向量调用的函数。两者都是通常属于 BSW 模块的用户代码,因此 Interrupt Handler 视为用户级代码。但在 Cat2 中断中,用户的中断处理程序被调用前,OS 的中断处理程序会先进行初步处理。</td></tr>
|
||||
<tr><td>Interrupt Logic(中断逻辑)</td><td>由 MCU 实现,控制所有设备的中断。通常由 OS 控制。</td></tr>
|
||||
<tr><td>Device(设备)</td><td>硬件 I/O 设备,在本文档范围内也能产生中断。</td></tr>
|
||||
<tr><td>Device Interrupt Enable Bit(设备中断使能位)</td><td>某个硬件设备内的一位或几位,由设备驱动控制,用于仅使能/禁止该设备的中断源。</td></tr>
|
||||
<tr><td>Interrupt Frame(中断帧)</td><td>由编译器或汇编代码为中断例程生成的前缀与后缀代码。该代码与微控制器相关。</td></tr>
|
||||
<tr><td>Definition Ref(引用定义)</td><td>从 XML 一部分到另一部分的引用。一个 BSW 模块的 XML 可引用另一个 BSW 模块的 XML 中的某些信息,从而避免同一信息在多处重复出现。</td></tr>
|
||||
<tr><td>Code Generator(代码生成器)</td><td>BSW 模块以两部分交付:代码和代码生成器。代码生成器读取完整、正确的 BSW 模块 XML,并生成用于配置该模块的代码与数据。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 输入文档</h3>
|
||||
<p>无。</p>
|
||||
|
||||
<h3 id="s3_2">3.2 相关标准与规范</h3>
|
||||
<p>无。</p>
|
||||
|
||||
<h2 id="s4">4 中断配置概述(Summary of Interrupt Configuration)</h2>
|
||||
<p>本章总结了中断所需的配置参数及其所在模块(即哪个模块负责)。本总结是从 ECU 配置的角度出发,假定某个具有 ECU 高层视图的系统配置编辑器负责将参数值放入 ECU 配置。</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>BSW 模块</th><th>包含的代码</th><th>XML 中包含的参数</th><th>理由</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>OS</strong></td>
|
||||
<td>所有相关代码由 OS 代码生成器自动生成。</td>
|
||||
<td>中断优先级、类别、向量、名称。</td>
|
||||
<td>这些都是配置 OS 所必需的。高级工具需要保证仅使用优先级、向量、类别的合法组合。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>BSW 调度器</strong></td>
|
||||
<td>进入和退出需要在中断处理程序中保护的临界区的代码。这些代码由 BSW 调度器的代码生成器自动生成。</td>
|
||||
<td>· 对定义该中断的 OS 对象的引用定义(Definition ref)<br>· 对访问该临界区的其他 OS 对象(TASK 或中断)的引用定义</td>
|
||||
<td>引用 OS 是为了获知优先级和访问临界区的对象(TASK 或中断)类型。这些信息使 BSW 调度器的代码生成器能生成合适的代码。BSW 调度器的代码生成还可能生成需要推入 OS 配置 XML 的 RESOURCE。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>设备驱动模块</strong></td>
|
||||
<td>中断处理程序的声明。这是 C 代码,由模块作者编写,<strong>不自动生成</strong>。注意 Cat1 和 Cat2 情况下的声明方式不同。</td>
|
||||
<td>对定义该中断的 OS 对象的引用定义</td>
|
||||
<td>C 中的中断处理程序定义需与 OS 对象中的名称和类别一致。处理程序名称需在 C 源码和 OS XML 中保持一致。C 源码可能需要 OS XML 中的一些信息用于正确的代码生成(例如某些编译器需要向量地址来声明 Cat1 处理程序)。</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<blockquote>
|
||||
<strong>注意</strong>:上表中未包含时序信息。原因在于目前尚无时序模型,因此尚不清楚 BSW 调度器如何被配置为使用除"中断使能/禁止"以外的方式来处理临界区。
|
||||
</blockquote>
|
||||
|
||||
<blockquote>
|
||||
<strong>注意</strong>:本文档引用了 BSW 调度器。虽然 BSW 调度器已并入 RTE,但本文的论述仍然有效。
|
||||
</blockquote>
|
||||
|
||||
<h2 id="s5">5 中断操作概述(Overview of Interrupt Operation)</h2>
|
||||
<p>本概述首先解释处理中断所涉及的步骤,然后将这些步骤映射到所涉及的不同 BSW 模块。</p>
|
||||
|
||||
<h3 id="s5_1">5.1 Cat1 与 Cat2 中断的区别(Distinction between cat1 and cat2 interrupts)</h3>
|
||||
<p>Cat1 和 Cat2 中断之间存在显著差异,详见下表:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>属性</th><th>Cat1(类别 1)</th><th>Cat2(类别 2)</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>与 OS 的交互</strong></td>
|
||||
<td>Cat1 中断<strong>不允许</strong>与 OS 的数据结构交互。实际上,它们只能调用的 OS 服务是全部中断的使能/禁止。</td>
|
||||
<td>Cat2 中断<strong>允许</strong>调用大部分 OS 服务,其他调用属于非法。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>延迟(Latency)</strong><br>即从硬件请求中断到中断处理程序第一条指令的时间</td>
|
||||
<td>Cat1 中断的延迟通常比 Cat2 低。这是其主要优势。</td>
|
||||
<td>Cat2 ISR 的延迟通常比 Cat1 高。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>OS 支持</strong><br>即 OS 的代码生成器和库以可移植方式对中断进行抽象的程度</td>
|
||||
<td>不支持。安全进出中断处理程序的代码不由 OS 生成,<strong>必须以其他方式生成</strong>,通常取决于编译器和处理器。</td>
|
||||
<td>支持。这是通过 C 文件中的 <code>ISR</code> 宏实现的,它以可移植方式将一个函数声明为中断处理程序。例如:<br><pre><code>ISR(Can_tx) {
|
||||
/* some code */
|
||||
}</code></pre>这是 Cat2 的主要优势。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>配置</strong><br>即在 XML 中捕获足够的信息供 OS 描述中断</td>
|
||||
<td>XML 包含关于 Cat1 中断的所有相关信息。但是,根据目标不同,这些信息可能使用也可能不使用。</td>
|
||||
<td>XML 包含关于 Cat2 中断的所有相关信息,用于生成向量表以及进出 Cat2 ISR 的中断硬件操控代码。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>中断逻辑的控制(目标相关性)</strong></td>
|
||||
<td>如果需要操控中断逻辑以进入或退出处理程序,是否发生取决于目标。例如,某些编译器具有 <code>interrupt</code> 关键字来辅助这一过程。但支持程度差异很大。</td>
|
||||
<td>由 OS 执行相应的操控。</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>与其他线程(TASK 或其他中断处理程序)的通信</strong><br>实际上是关于缓冲区互斥的实现方式</td>
|
||||
<td>在 TASK 或低优先级中断中,可通过"关闭所有中断"实现互斥。这是因为没有 API 可将优先级设置为特定级别,也没有 API 可以使能/禁止特定中断源。<br>在 Cat1 中断处理程序中,由于临界区与低优先级线程(TASK 或低优先级中断)共享,<strong>不需要</strong>关闭中断。<br>我们假设不存在两个 Cat1 中断处理程序直接通信的用例。</td>
|
||||
<td>OS <strong>RESOURCE 抽象</strong>是处理 Cat2 ISR 与 TASK 之间、或 Cat2 ISR 之间交互的<strong>最佳方式</strong>。该机制知道 Cat2 中断优先级和 TASK 优先级,因此会锁定到能保证互斥的最低优先级。正确的优先级可由工具离线计算得出。</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s6">6 中断操作的步骤(Steps in the operation of interrupts)</h2>
|
||||
<p>由于 Cat1 和 Cat2 中断之间存在显著差异,它们在 OS 和应用代码中的处理方式非常不同。本节给出处理方式的概述。</p>
|
||||
<p>我们将分别讨论中断发生前需要建立的状态,以及由谁来负责建立该状态。</p>
|
||||
|
||||
<h3 id="s6_1">6.1 Cat1 中断的处理(Handling cat1 interrupts)</h3>
|
||||
|
||||
<h4 id="s6_1_1">6.1.1 初始状态(Initial state)</h4>
|
||||
<p>需要设置中断的向量表条目,使其指向中断处理程序。</p>
|
||||
<p>对于 Cat1 中断,该设置与目标相关。AUTOSAR OS 的某些实现可能支持设置向量表,其他则不支持。在 OS 不支持的情况下,需要采用其他方法,例如编译器指令或修改向量表。</p>
|
||||
<p>中断处理程序<strong>应当</strong>被正确声明。通常编译器对此提供支持,例如:</p>
|
||||
|
||||
<pre><code>__interrupt Can_tx() {
|
||||
/* some user application code */
|
||||
}</code></pre>
|
||||
|
||||
<p>但有时编译器不支持,且不同编译器之间的语法和语义会变化。因此<strong>可能</strong>需要提供特定于处理器和编译器的支持来声明 Cat1 处理程序。</p>
|
||||
<p>处理器的中断逻辑<strong>应当</strong>被设置为可请求中断。Cat1 情况下通常没有 OS 支持,因此需要按目标逐一执行。</p>
|
||||
<p>产生中断的设备<strong>应当</strong>被设置为在所需条件下产生中断。Cat1 和 Cat2 都需要此设置,通常是设备驱动的一部分(即在用户域内)。</p>
|
||||
|
||||
<h4 id="s6_1_2">6.1.2 硬件请求中断时(When the hardware requests an interrupt)</h4>
|
||||
<p>以下是从设备请求中断到返回被中断线程所发生的一系列步骤:</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>动作</th><th>责任方</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>请求中断</td><td>设备</td></tr>
|
||||
<tr><td>优先级判定:等待直到处理器优先级足够低,可以接受中断</td><td>中断逻辑(有时是 CPU 的一部分,有时不是)</td></tr>
|
||||
<tr><td>识别中断:允许该请求中断 CPU</td><td>CPU</td></tr>
|
||||
<tr><td>保存中断状态</td><td>CPU</td></tr>
|
||||
<tr><td>沿向量表条目进入中断处理程序</td><td>CPU</td></tr>
|
||||
<tr><td>中断处理程序前缀(如保存编译器相关寄存器等)</td><td>由 <code>__interrupt</code> 关键字(或所用方法)生成的中断处理程序代码</td></tr>
|
||||
<tr><td>执行与中断关联的动作</td><td>中断处理程序中的用户代码。<strong>注意</strong>:此代码不能调用大部分 OS 服务。</td></tr>
|
||||
<tr><td>在设备中清除中断请求,使其不会立即再次发生</td><td>中断处理程序中的用户代码。<strong>注意</strong>:此代码不能调用大部分 OS 服务。</td></tr>
|
||||
<tr><td>设置中断控制器的状态,使该中断可以再次发生</td><td>由 <code>__interrupt</code> 关键字生成的后缀代码。也可能在用户域中,取决于编译器。</td></tr>
|
||||
<tr><td>恢复编译器寄存器</td><td>由 <code>__interrupt</code> 关键字生成的中断处理程序代码</td></tr>
|
||||
<tr><td>RETI(中断返回)</td><td>由 <code>__interrupt</code> 关键字生成的中断处理程序代码</td></tr>
|
||||
<tr><td>恢复被中断线程的状态</td><td>CPU</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<blockquote>
|
||||
<strong>图:Cat1 InterruptHandler 逻辑</strong><br>
|
||||
设备 → IRQ → 中断逻辑 → IRQ → 中断分发(CPU/MCU)→ 中断帧入口 → 用户代码 → 中断帧出口。
|
||||
</blockquote>
|
||||
|
||||
<h3 id="s6_2">6.2 Cat2 中断的处理(Handling cat2 interrupts)</h3>
|
||||
<p>Cat2 中断提供了比 Cat1 中断更高层次的抽象,但运行时开销更高,且占用 OS 更多的 RAM 和 ROM。</p>
|
||||
|
||||
<h4 id="s6_2_1">6.2.1 初始状态(Initial state)</h4>
|
||||
<p>处理器的中断向量表条目<strong>应当</strong>设置为指向 OS。Cat2 中断的该设置由 OS 的代码生成器完成。</p>
|
||||
<p>中断处理程序<strong>应当</strong>被正确声明。AUTOSAR 中定义为:</p>
|
||||
|
||||
<pre><code>ISR(Can_tx) {
|
||||
/* some user application code */
|
||||
}</code></pre>
|
||||
|
||||
<p><code>ISR</code> 宏可能会导致中断发生时进入 OS,也可能不会。但该宏的核心是封装一个 Cat2 中断处理程序。因此 <code>ISR</code> 展开得到的代码是实现细节。</p>
|
||||
<p>处理器的中断逻辑<strong>应当</strong>被设置为可请求中断。Cat2 情况下由 OS 处理。</p>
|
||||
<p>产生中断的设备<strong>应当</strong>被设置为在所需条件下产生中断。Cat1 和 Cat2 都需要此设置,通常是设备驱动的一部分。</p>
|
||||
|
||||
<h4 id="s6_2_2">6.2.2 硬件请求中断时(When the hardware requests an interrupt)</h4>
|
||||
<p>Cat2 中断所需的 CPU 行为与 Cat1 相同,大多数其他方面则不同。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>动作</th><th>责任方</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>请求中断</td><td>设备</td></tr>
|
||||
<tr><td>优先级判定:等待直到处理器优先级足够低</td><td>中断逻辑(有时是 CPU 的一部分,有时不是)</td></tr>
|
||||
<tr><td>识别中断</td><td>CPU</td></tr>
|
||||
<tr><td>保存中断状态</td><td>CPU</td></tr>
|
||||
<tr><td>沿向量表条目进入 OS</td><td>CPU</td></tr>
|
||||
<tr><td>OS 前缀:保存编译器相关寄存器等,建立 OS 包装器以封装 ISR</td><td>OS 代码生成器生成的代码和 OS 库的代码</td></tr>
|
||||
<tr><td>执行与中断关联的动作</td><td>ISR 中的用户代码。<strong>注意</strong>:此代码可以调用任何 OS 服务。</td></tr>
|
||||
<tr><td>在设备中清除中断请求</td><td>ISR 中的用户代码。<strong>注意</strong>:此代码可以调用任何 OS 服务。</td></tr>
|
||||
<tr><td>离开处理程序并重新进入 OS</td><td>重新进入 OS 时,检查 TASK 激活并以用户优先级运行相应的 TASK</td></tr>
|
||||
<tr><td>设置中断逻辑状态,使该中断可以再次发生</td><td>OS 生成代码和库的一部分</td></tr>
|
||||
<tr><td>恢复编译器寄存器</td><td>OS 生成代码和库的一部分</td></tr>
|
||||
<tr><td>RETI(中断返回)</td><td>OS 生成代码和库的一部分</td></tr>
|
||||
<tr><td>恢复被中断线程的状态</td><td>CPU</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<blockquote>
|
||||
<strong>图:Cat2 ISR 逻辑</strong><br>
|
||||
设备 → IRQ → 中断逻辑 → IRQ → 中断分发(CPU/MCU)→ 中断帧入口 → OS 调用 → 用户代码 → 任务分发 → 中断帧出口。
|
||||
</blockquote>
|
||||
|
||||
<h2 id="s7">7 中断的配置(Configuration of Interrupts)</h2>
|
||||
<p>第 5 章中讨论了处理中断的以下参与方:</p>
|
||||
<ul>
|
||||
<li>设备驱动</li>
|
||||
<li>OS</li>
|
||||
<li>BSW 调度器</li>
|
||||
<li>未配置项</li>
|
||||
</ul>
|
||||
<p>下面将分别讨论 Cat1 和 Cat2 情况下每个参与方的配置问题。</p>
|
||||
|
||||
<h3 id="s7_1">7.1 设备驱动的配置与代码(Device Driver configuration and code)</h3>
|
||||
<p>每个设备驱动都需要包含中断处理程序的代码,即设备驱动的作者<strong>必须</strong>将中断处理程序的代码作为设备驱动实现的一部分来编写。但 Cat1 和 Cat2 情况下的代码不同。</p>
|
||||
<p>Cat2 ISR 是最简单的情况,因为有 OS 支持。代码基于以下模板:</p>
|
||||
|
||||
<pre><code>ISR(<name>) {
|
||||
<user code to handle ISR>
|
||||
<user code to dismiss interrupt>
|
||||
}</code></pre>
|
||||
|
||||
<p><code><name></code> 必须与 OS 配置中选择的名称一致。</p>
|
||||
<p>Cat1 中断处理程序较为麻烦,因为没有 OS 支持。典型模板为:</p>
|
||||
|
||||
<pre><code><some target specific preamble to mark this function as an interrupt handler>
|
||||
<name>() {
|
||||
<user code to handle ISR>
|
||||
<user code to set up interrupt controller>
|
||||
<user code to dismiss interrupt>
|
||||
}</code></pre>
|
||||
|
||||
<p>然而,所需的精确代码非常依赖于处理器和编译器,<strong>不可移植</strong>。这可能不是问题,因为设备驱动本身的可移植性也较差。</p>
|
||||
<p>编写处理程序是设备驱动作者的责任,特别是在 Cat1 情况下,<strong>必须</strong>确保与中断控制器的正确交互。<sup>1</sup></p>
|
||||
|
||||
<blockquote><sup>1</sup> 根据作者的经验,这种交互很难正确实现,预计将成为 bug 来源。</blockquote>
|
||||
|
||||
<h4 id="s7_1_1">7.1.1 中断处理程序的放置(Placement of Interrupt Handlers)</h4>
|
||||
<p>类别 1 中断处理程序被使用是因为它们具有最快的响应时间。因此,任何使类别 1 中断变慢的做法都是适得其反的。所以类别 1 中断处理程序<strong>应当</strong>位于该中断设备的驱动中。</p>
|
||||
<p>类别 2 处理程序较慢,因此在其放置位置上可以有更多余地。然而,将它们放在类别 1 处理程序之外的位置会成倍增加复杂度,却没有实际收益。</p>
|
||||
<p>因此类别 2 中断处理程序<strong>也应当</strong>位于该中断设备的驱动中——在 BSW 调度器或其他位置没有"thunk"。此处的"thunk"是指 BSW 调度器中的一小段代码,仅用于调用设备驱动中的真正处理程序。</p>
|
||||
|
||||
<h3 id="s7_2">7.2 OS 配置(OS configuration)</h3>
|
||||
<p>为了正确配置中断,OS 需要知道一些相当复杂的信息。在 Cat1 和 Cat2 情况下,<strong>都必须</strong>知道:</p>
|
||||
<ul>
|
||||
<li>中断向量</li>
|
||||
<li>中断优先级</li>
|
||||
<li>中断处理程序的 <code><name></code></li>
|
||||
<li>类别</li>
|
||||
</ul>
|
||||
<p>在某些目标上,一个参数会限制另一个参数的取值范围。例如在 TriCore 上,向量隐含优先级。因此并非所有"向量、优先级、类别"的组合都合法。</p>
|
||||
<p>中断处理程序的 <code><name></code> 可以由配置 OS 的人或配置设备驱动的人来设置。其实由谁起名并不重要,只要在 OS 配置和设备驱动中使用相同的名称即可。</p>
|
||||
<p>设置向量、优先级和类别则更有意思。<sup>2</sup></p>
|
||||
<p>OS 配置中选择的类别(Cat1 或 Cat2)<strong>必须</strong>与驱动和接口中选择的实现策略一致。对于"validator 2"风格的配置<sup>3</sup>,编写配置的人<strong>必须</strong>确保驱动、接口和 OS 类别中的实现策略相互一致。</p>
|
||||
|
||||
<blockquote><sup>2</sup> 特别是 AUTOSAR XML 尚无用于向量或优先级的参数。<br><sup>3</sup> 即所有模块均手动配置,没有自动的跨模块检查或一致性检查。</blockquote>
|
||||
|
||||
<p>从长远来看,更好的做法是提供一些自动支持。例如,每个模块的 XML 描述了允许哪些类别,配置则捕获实际使用的类别。这将使自动代码生成成为可能。</p>
|
||||
<p>因此对于 validator 2 来说,GCE 和操作员基于 BSW 模块实现的信息手动选择类别,可能是足够的。</p>
|
||||
<p>设置向量和优先级在 validator 2 中也是手动的(即通过 GCE)。但同样,从长远来看,需要一些自动辅助。</p>
|
||||
<p>通常类别、向量、优先级之间存在一定的依赖关系<sup>4</sup>。GCE 不检查这些依赖关系,因此<strong>必须</strong>由 GCE 的使用者结合 OS 手册进行检查。</p>
|
||||
|
||||
<blockquote><sup>4</sup> 许多实现要求 Cat1 中断的优先级高于所有 Cat2 中断。</blockquote>
|
||||
|
||||
<p>从中期来看,可以预期这些依赖关系知识会被构建到更高级的创作工具中,从而由创作工具保证正确的关系。</p>
|
||||
<p>因此优先级和向量也是 OS 的配置项。</p>
|
||||
<p>OS 提供的 <strong>RESOURCE</strong> 也<strong>必须</strong>被指定。为了使 RESOURCE 正确工作,OS <strong>必须</strong>知道引用每个 RESOURCE 的所有对象(TASK 和 ISR)<sup>5</sup>。BSW 调度器负责处理临界区,因此逻辑上也负责配置 OS。但 BSW 调度器需要知道每个 BSW 模块需要哪些临界区。</p>
|
||||
|
||||
<blockquote><sup>5</sup> 如果 OS 未正确获取所有这些信息,临界区将产生难以排查的 bug。</blockquote>
|
||||
|
||||
<p>对于"挂起和恢复所有中断"的调用,不需要额外的 OS 配置。</p>
|
||||
|
||||
<h3 id="s7_3">7.3 BSW 调度器配置(BSW Scheduler configuration)</h3>
|
||||
<p>BSW 调度器有两个目的:</p>
|
||||
<ol>
|
||||
<li>提供一个 TASK 调用 BSW 主函数;</li>
|
||||
<li>提供负责锁定临界区的代码。因此临界区<strong>仅</strong>通过 BSW 调度器实现。</li>
|
||||
</ol>
|
||||
<p>下面讨论这两个方面的配置。本讨论很大程度上依赖于作者对通信栈的经验。</p>
|
||||
<p>作者还假设 BSW 调度器将被编写成<strong>尝试使用最合适的方法</strong>来保护临界区。<sup>6</sup></p>
|
||||
|
||||
<blockquote><sup>6</sup> 详情见 [1]。</blockquote>
|
||||
|
||||
<h4 id="s7_3_1">7.3.1 主函数的 TASK(TASK for main functions)</h4>
|
||||
<p>BSW 调度器的配置需要知道调用哪些主函数以及调用顺序。通常 BSW 调度器的代码生成器会生成按顺序调用主函数的代码。例如(虚构的合理名称):</p>
|
||||
|
||||
<pre><code>void Run_com_stack() {
|
||||
canif_main_rx();
|
||||
linif_main_rx();
|
||||
frif_main_rx();
|
||||
pdur_main_rx();
|
||||
pdumux_main_rx();
|
||||
com_main_rx();
|
||||
com_main_gw();
|
||||
com_main_tx();
|
||||
etc…
|
||||
TerminateTask();
|
||||
}</code></pre>
|
||||
|
||||
<p>这意味着 BSW 调度器需要知道包含主函数的 TASK,以便通知 OS 配置正确地配置 RESOURCE。BSW 调度器还需要知道 BSW 模块之间的控制流以及所引用的临界区。BSW 调度器需要能够从其配置数据中找到这些信息。</p>
|
||||
|
||||
<h4 id="s7_3_2">7.3.2 栈中的其他 TASK(Other TASKs in the stack)</h4>
|
||||
<p>通常,BSW 模块也会从主函数以外的控制流进入。因此同样值得关注的是 BSW 从 RTE 进入的上下文。这是因为 RTE 的 TASK(或其多个 TASK 之一)最终也会访问一个临界区,并因此调用 BSW 调度器。因此 RTE 的 TASK(或 TASK)需要被添加到引用 RESOURCE 的列表中。</p>
|
||||
<p>所有进入 BSW 的此类控制流<strong>必须</strong>被识别,并用于配置 BSW 调度器,进而配置 OS。</p>
|
||||
|
||||
<h4 id="s7_3_3">7.3.3 临界区(Critical sections)</h4>
|
||||
<p>本章包含 3 个子节。前两个子节讨论两类中断处理程序中临界区的问题。最后一个子节讨论 BSW 调度器中临界区的实现。前两个子节描述中断处理程序面临的问题,第三个子节描述 BSW 调度器如何帮助解决这些问题。</p>
|
||||
|
||||
<h5>7.3.3.1 类别 1 处理程序中的互斥(Mutual exclusion in category 1 handlers)</h5>
|
||||
<ol>
|
||||
<li>假设有一个 Cat1 中断 C1 和某个其他线程(TASK 或中断)T1。</li>
|
||||
<li>假设 priority(C1) > priority(T1)。</li>
|
||||
</ol>
|
||||
<p>假设 2 意味着:当 C1 运行时 T1 不能抢占,而 T1 运行时 C1 可以抢占。因此<strong>必须</strong>在 T1 中放置保护。典型做法是用匹配的 <code>SuspendAllInterrupts</code> 和 <code>ResumeAllInterrupts</code> 调用包含临界区。</p>
|
||||
<p>对应的情况是:</p>
|
||||
<ol start="3">
|
||||
<li>假设 priority(C1) < priority(T1)。</li>
|
||||
</ol>
|
||||
<p>在这种情况下,T1 <strong>必须</strong>是另一个 Cat1 中断(即不能是其他任何东西),因此保护临界区的责任在 C1 一方。我们假设 AUTOSAR 中没有这种用例。不过,为了完整性,我们描述这种情况下的相关问题。</p>
|
||||
<p>代码与配置之间的依赖关系<strong>必须</strong>保证一致。可以通过两种方式实现:</p>
|
||||
<ul>
|
||||
<li><strong>手动</strong>:在驱动中放入 suspend 和 resume 调用,开销低,但出错的概率高;</li>
|
||||
<li><strong>自动</strong>:使用 BSW 调度器模块,将 suspend 和 resume 调用放入 BSW 调度器中,并在驱动中调用 BSW 调度器。这样开销更高,但出错概率低。</li>
|
||||
</ul>
|
||||
<p>我们建议由 BSW 调度器处理此问题,即采用<strong>自动</strong>方式。因此 BSW 调度器的配置<strong>必须</strong>知道一个中断处理程序的类别。</p>
|
||||
|
||||
<h5>7.3.3.2 类别 2 处理程序中的互斥(Mutual exclusion in category 2 handlers)</h5>
|
||||
<p>为实现 TASK 与 Cat2 ISR 之间的互斥,可使用 OS <strong>RESOURCE</strong>。也可以使用中断锁定,并将一并讨论。RESOURCE 在 TASK/ISR、ISR/ISR 两种交叉情况下均有效。</p>
|
||||
<p>关闭中断也可用于互斥。如果两个 ISR 优先级相同,则不需要互斥,因为它们不能同时运行。</p>
|
||||
<p>在用户代码中,临界区由调用 BSW 调度器进入和离开临界区。在 BSW 调度器中,这些进入/离开调用被解析为资源加锁/解锁调用或中断挂起/恢复调用。选择由 BSW 调度器的配置算法决定。但无论做出何种决定,BSW 调度器都需要有正确的信息来做出决定,并且还<strong>必须</strong>将任何额外的配置对象通知 OS。</p>
|
||||
|
||||
<h5>7.3.3.3 BSW 调度器中的临界区(Critical sections in the BSW Scheduler)</h5>
|
||||
<p>在 BSW 调度器中,临界区通常以以下两种方式之一实现:</p>
|
||||
<ul>
|
||||
<li>挂起/恢复 或 使能/禁止 中断</li>
|
||||
<li>RESOURCE</li>
|
||||
</ul>
|
||||
<p>从配置的角度看,这是一个重要观点。为了保护临界区,BSW 调度器可以简单地<strong>挂起/恢复所有中断</strong>以进入/离开临界区。这非常容易配置,几乎不需要了解应用行为(即不需要额外的 RESOURCE,因此不需要知道哪些 TASK/ISR 引用它们)。然而,如果临界区中停留的时间较长,这可能导致非常长的高优先级阻塞时间。</p>
|
||||
<p>更好的 BSW 调度器将使用 RESOURCE,从而减少高优先级阻塞的时间。但这需要多得多的信息。在上述讨论中,我们试图识别这些信息的来源。</p>
|
||||
<p>另一种解决方案是将所有东西设为 Cat2 ISR 或 TASK。然后可以使用 OS <code>Suspend/Resume Interrupts</code>。这种方式不需要知道哪个 BSW 需要哪个 RESOURCE,但会在每个临界区阻塞所有 TASK 和 Cat2 ISR。</p>
|
||||
<p>哪种方案最合适取决于许多 BSW 软件部分的时序数据和时序模型。目前这两者都不存在。</p>
|
||||
<p>如果使用 BSW 调度器来解耦 Cat1 中断(见第 8 章),则<strong>只允许</strong>使用"suspend/resume 所有中断"。</p>
|
||||
|
||||
<h4 id="s7_3_4">7.3.4 小结(Summary)</h4>
|
||||
<p>BSW 调度器的配置是个难题。以最简单方式(suspend/resume 中断)配置很简单,但存在显著的缺点,例如高优先级阻塞时间长。更好的配置(RESOURCE)需要在 BSW 调度器中放入大量信息,然后传递给 OS。这些信息如何获取尚不清楚。</p>
|
||||
|
||||
<h2 id="s8">8 Cat1 中断的使用建议(Recommendations for the use of cat1 interrupts)</h2>
|
||||
<p>大多数设备驱动能够使用 Cat2 ISR,并且<strong>应当</strong>将 Cat2 ISR 作为处理中断的<strong>首选方法</strong>。</p>
|
||||
<p>Cat1 中断<strong>应当</strong>仅在以下有限场景中使用:</p>
|
||||
<ul>
|
||||
<li>当中断到达率导致 OS 中 Cat2 包装器的开销不可接受时;</li>
|
||||
<li>当中断延迟必须非常低,以至于 Cat2 ISR 不够快时;</li>
|
||||
<li>当所定义的中断处理程序需要低抖动(jitter)时。</li>
|
||||
</ul>
|
||||
<p>当驱动中使用 Cat1 中断时,<strong>应当</strong>尽快解耦。最晚应位于驱动之上的紧邻层。</p>
|
||||
|
||||
<h3 id="s8_1_1">8.1.1 使用 Cat1 中断的相邻模块通信(Communication between adjacent modules using cat1 interrupts)</h3>
|
||||
<p>将 Cat1 中断传播到驱动之外太远是个问题,因为这意味着对于临界区,栈的大量部分(内存、通信等)需要知道 Cat1 中断,且阻塞时间会很长。</p>
|
||||
<p>Cat1 中断的长时间阻塞尤为令人担忧,因为所有中断都会被阻塞,而不仅仅是其中一部分。</p>
|
||||
<p>因此 Cat1 中断<strong>应当</strong>尽快解耦。实际工作方式如下:下图显示了两个相邻模块:处理 Cat1 中断的驱动和接口。</p>
|
||||
|
||||
<blockquote>
|
||||
<strong>图:Cat1 中断相邻模块</strong>
|
||||
<pre>
|
||||
Upper layer
|
||||
↕
|
||||
Interface
|
||||
↕ (通过 buffer / Main function)
|
||||
Driver
|
||||
↕ interrupt
|
||||
Hardware
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p>当上层想要向下发送数据时,它向接口请求。接口通过 BSW 调度器挂起所有中断来锁定缓冲区,将数据复制到缓冲区或直接复制到驱动中,然后通过 BSW 调度器恢复中断。</p>
|
||||
<p>当驱动通过中断接收到数据时,驱动会请求接口对数据进行缓冲,然后退出。这最大限度地减少了在 Cat1 优先级停留的时间。在稍后的某个时间点运行主函数。它会锁定 Cat1 中断,然后通过调用上层将数据从缓冲区向上复制。</p>
|
||||
<p>如果复制到上层的数据较多,可能需要将主函数编写为一系列小临界区。例如,下面的代码展示了一个大临界区:</p>
|
||||
|
||||
<pre><code>Suspend interrupts();
|
||||
While data in buffers {
|
||||
Copy single buffer
|
||||
}
|
||||
Resume interrupts();</code></pre>
|
||||
|
||||
<p>这是最小、最快的实现,但阻塞时间最长。类似的实现是:</p>
|
||||
|
||||
<pre><code>While data in buffers {
|
||||
Suspend interrupts();
|
||||
Copy single buffer
|
||||
Resume interrupts();
|
||||
}</code></pre>
|
||||
|
||||
<p>这种方式效率较低,但阻塞时间更短,因此不太可能延迟快速发生的 Cat1 中断。</p>
|
||||
|
||||
<h3 id="s8_1_2">8.1.2 信任(Trust)</h3>
|
||||
<p>OS 的时间与空间保护被规范化以支持<strong>不受信任的代码</strong>,目的是检测并防止时间或空间的越界。但这些检查<strong>不能</strong>为 Cat1 中断实现。因此所有 Cat1 中断处理程序<strong>必须</strong>是受信任的。</p>
|
||||
<p>然而,情况比上一段所述还要糟糕。任何通过"挂起所有中断"来锁定所有中断的代码,也会阻止监控执行时间的定时器中断。因此,<strong>任何</strong>即使在其不知情的情况下(即这是 BSW 调度器的决策)锁定所有中断的模块,都<strong>必须</strong>是受信任的。</p>
|
||||
<p>其结果是:简单的 BSW 调度器实现(仅使用"关闭中断"实现互斥)意味着在该 ECU 中所有 BSW 模块都必须是受信任的。</p>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 8 章 + 8.1.1/8.1.2 子节,译文完整对应(1–8 章;5.1、6.1.1/6.1.2、6.2.1/6.2.2、7.1.1、7.3.1–7.3.4、8.1.1/8.1.2 全保留)。</li>
|
||||
<li>✅ <strong>术语对照</strong>:Cat1/Cat2 ISR、Interrupt Handler、Interrupt Logic、Interrupt Frame、RESOURCE、GCE、RETI 等术语已与术语表对齐。</li>
|
||||
<li>✅ <strong>代码块</strong>:原文 3 段 C 伪代码(<code>ISR(Can_tx)</code>、<code>__interrupt</code> 模板、<code>Run_com_stack()</code>、<code>Suspend/Resume</code> 示例)全部保留。</li>
|
||||
<li>✅ <strong>脚注</strong>:原文 6 处脚注(关于作者经验、AUTOSAR XML 限制、validator 2、cat1/cat2 优先级依赖、OS RESOURCE 信息、参考资料 [1])全部保留并翻译。</li>
|
||||
<li>✅ <strong>比较表</strong>:5.1 节 Cat1 vs Cat2 属性对比表完整翻译;4 章中断配置 3 模块对比表完整翻译。</li>
|
||||
<li>✅ <strong>UML/时序图</strong>:原文 2 张时序图(Cat1 InterruptHandler 逻辑、Cat2 ISR 逻辑)以文字描述 + ASCII 结构方式保留。</li>
|
||||
<li>⚠ <strong>脚注编号</strong>:原文脚注 1–6 编号延续至 7.3 节末尾,译文按原文位置标注。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_EXP_InterruptHandlingExplanation.pdf(22 页)· 文档 ID 307
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,735 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>基础软件模块通用需求 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>基础软件模块通用需求(General Requirements on Basic Software Modules)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:043</span>
|
||||
<span>🏷 类型:SRS(软件需求规范)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:80</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_SRS_BSWGeneral.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与功能概述</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a></li>
|
||||
<li><a href="#s4">4 需求结构与映射</a></li>
|
||||
<li><a href="#s5">5 需求清单</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 功能需求</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1_1">5.1.1 配置(Configuration)</a></li>
|
||||
<li><a href="#s5_1_2">5.1.2 初始化(Initialization)</a></li>
|
||||
<li><a href="#s5_1_3">5.1.3 正常运行(Normal Operation)</a></li>
|
||||
<li><a href="#s5_1_4">5.1.4 关闭操作(Shutdown Operation)</a></li>
|
||||
<li><a href="#s5_1_5">5.1.5 故障操作(Fault Operation)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5_2">5.2 非功能需求</a>
|
||||
<ul>
|
||||
<li><a href="#s5_2_1">5.2.1 时序需求(Timing Requirements)</a></li>
|
||||
<li><a href="#s5_2_2">5.2.2 资源使用(Resource Usage)</a></li>
|
||||
<li><a href="#s5_2_3">5.2.3 可用性(Usability)</a></li>
|
||||
<li><a href="#s5_2_4">5.2.4 其他工作包产出(Output for other WPs)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 需求追溯</a></li>
|
||||
<li><a href="#s7">7 变更历史</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与功能概述(Introduction and functional overview)</h2>
|
||||
<p>本文档定义了 AUTOSAR 基础软件(BSW)模块的<strong>通用需求</strong>。这些需求适用于所有标准化的 AUTOSAR BSW 模块,以确保:</p>
|
||||
<ul>
|
||||
<li>模块间的<strong>一致性</strong>和<strong>可互换性</strong>;</li>
|
||||
<li>统一的<strong>命名约定</strong>和编码风格;</li>
|
||||
<li>一致的<strong>配置</strong>和<strong>初始化</strong>机制;</li>
|
||||
<li>一致的<strong>错误处理</strong>和<strong>报告</strong>机制;</li>
|
||||
<li>统一的<strong>版本</strong>和<strong>标识</strong>机制。</li>
|
||||
</ul>
|
||||
<p>需求 ID 格式为 <code>SRS_BSW_NNNNN</code>,如 <code>SRS_BSW_00003</code>。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>ISR</td><td>Interrupt Service Routine(中断服务程序)</td></tr>
|
||||
<tr><td>OS</td><td>Operating System(操作系统)</td></tr>
|
||||
<tr><td>BSW</td><td>Basic Software(基础软件)</td></tr>
|
||||
<tr><td>MCAL</td><td>Microcontroller Abstraction Layer(微控制器抽象层)</td></tr>
|
||||
<tr><td>SW-C</td><td>Software Component(软件组件)</td></tr>
|
||||
<tr><td>RTE</td><td>Runtime Environment(运行时环境)</td></tr>
|
||||
<tr><td>API</td><td>Application Programming Interface(应用程序编程接口)</td></tr>
|
||||
<tr><td>DEM</td><td>Diagnostic Event Manager(诊断事件管理器)</td></tr>
|
||||
<tr><td>DET</td><td>Default Error Tracer(默认错误追踪器)</td></tr>
|
||||
<tr><td>ECU</td><td>Electronic Control Unit(电子控制单元)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>Layered Software Architecture</td><td><code>AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf</code></td></tr>
|
||||
<tr><td>[2]</td><td>Specification of Basic Software Module Description Template</td><td><code>AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf</code></td></tr>
|
||||
<tr><td>[3]</td><td>General Specification of Basic Software Modules</td><td><code>AUTOSAR_SWS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[4]</td><td>Specification of Standard Types</td><td><code>AUTOSAR_SWS_StandardTypes.pdf</code></td></tr>
|
||||
<tr><td>[5]</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s4">4 需求结构与映射(Requirements structure and mapping)</h2>
|
||||
<p>本文档的需求分为两类:</p>
|
||||
<ul>
|
||||
<li><strong>功能需求(Functional Requirements)</strong>:模块的行为;</li>
|
||||
<li><strong>非功能需求(Non-Functional Requirements)</strong>:时序、资源、可用性等。</li>
|
||||
</ul>
|
||||
<p>需求 ID 按主题分组:</p>
|
||||
<ul>
|
||||
<li><code>SRS_BSW_00001</code>–<code>SRS_BSW_00100</code>:通用模块规范;</li>
|
||||
<li><code>SRS_BSW_00101</code>–<code>SRS_BSW_00200</code>:架构相关;</li>
|
||||
<li><code>SRS_BSW_00300</code>–<code>SRS_BSW_00399</code>:命名约定;</li>
|
||||
<li><code>SRS_BSW_00400</code>–<code>SRS_BSW_00499</code>:配置相关;</li>
|
||||
<li><code>SRS_BSW_00500</code> 以上:错误分类与处理;</li>
|
||||
<li><code>RS_BRF_NNNNN</code>:业务需求框架层的需求。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s5">5 需求清单(Requirements list)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 功能需求(Functional Requirements)</h3>
|
||||
|
||||
<h4 id="s5_1_1">5.1.1 配置(Configuration)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00158]</span> 所有 BSW 模块<strong>应当</strong>支持基于<strong>工具</strong>的配置。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00159]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>支持基于工具的配置。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00160]</span> AUTOSAR BSW 模块的配置文件<strong>应当</strong>人类可读。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00167]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>提供配置规则和约束,以启用合理性检查。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00171]</span> BSW 组件中不需要的可选功能<strong>应当</strong>可在<strong>编译时</strong>配置。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00344]</span> BSW 模块<strong>应当</strong>支持<strong>链接时配置</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00345]</span> BSW 模块<strong>应当</strong>支持<strong>编译前配置</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00380]</span> 存储在内存中的配置参数<strong>应当</strong>放置在<strong>单独的 c 文件</strong>中。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00383]</span> 基础软件模块规范<strong>应当</strong>至少在描述中说明它们使用了哪些其他模块的配置文件。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00388]</span> 容器<strong>应当</strong>用于为同一对象定义的配置参数分组。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00389]</span> 容器<strong>应当</strong>具有名称。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00390]</span> 参数内容在模块内<strong>应当</strong>唯一。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00392]</span> 参数<strong>应当</strong>具有类型。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00393]</span> 参数<strong>应当</strong>具有范围。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00394]</span> 基础软件模块规范<strong>应当</strong>说明配置参数的作用域。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00395]</span> 基础软件模块规范<strong>应当</strong>列出所有配置参数依赖关系。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00396]</span> 基础软件模块规范<strong>应当</strong>说明每个参数/容器支持的配置类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00397]</span> 编译前配置参数在编译开始前<strong>应当</strong>是固定的。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00398]</span> 链接时配置在编译之后、链接之前的阶段基于目标代码<strong>应当</strong>实现。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00399]</span> 参数集<strong>应当</strong>位于单独的段中,并在代码之后加载。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00400]</span> 在代码加载并启动后,参数<strong>应当</strong>可从多组参数中选择。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00401]</span> 应当提供配置参数多个实例的文档。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00404]</span> BSW 模块<strong>应当</strong>支持<strong>构建后配置</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00405]</span> BSW 模块<strong>应当</strong>支持<strong>多配置集</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00414]</span> 初始化函数<strong>应当</strong>将配置结构指针作为唯一参数。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00416]</span> 模块的初始化顺序<strong>应当</strong>可配置。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00419]</span> 如果编译前配置参数实现为 <code>const</code>,则<strong>应当</strong>放置在单独的 c 文件中。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00413]</span> BSW 模块实例的访问<strong>应当</strong>基于索引。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00408]</span> 所有 AUTOSAR BSW 模块配置参数<strong>应当</strong>根据特定命名规则命名。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00411]</span> 所有 AUTOSAR BSW 模块<strong>应当</strong>应用 API 存在性的使能/禁止命名规则。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00415]</span> 仅为一个模块提供的接口<strong>应当</strong>分离到专门的头文件中。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_1_2">5.1.2 初始化(Initialization)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00101]</span> 基础软件模块<strong>应当</strong>能够在单独的初始化函数中初始化变量和硬件。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00406]</span> 标识 BSW 模块是否已初始化的静态状态变量,在调用 BSW 模块的任何 API 之前<strong>应当</strong>初始化为值 0。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00407]</span> 每个 BSW 模块<strong>应当</strong>提供读取专用模块实现版本信息的函数(<code><Module>_GetVersionInfo()</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00410]</span> 编译器开关<strong>应当</strong>具有定义的值。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_1_3">5.1.3 正常运行(Normal Operation)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00003]</span> 所有软件模块<strong>应当</strong>提供版本和标识信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00004]</span> 所有 BSW 模块<strong>应当</strong>对所有导入的头文件执行版本预处理检查。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00005]</span> 微控制器抽象层(MCAL)的模块<strong>不得</strong>有硬编码的水平接口。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00006]</span> MCAL 之上的软件模块的源代码<strong>不得</strong>是处理器和编译器相关的。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00007]</span> 所有用 C 语言编写的基础软件模块<strong>应当</strong>遵循 MISRA C 2012 标准。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00009]</span> 所有基础软件模块<strong>应当</strong>根据通用标准进行文档化。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00010]</span> 所有 BSW 模块的内存消耗<strong>应当</strong>在定义配置下为所有支持的平台记录文档。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00161]</span> AUTOSAR 基础软件<strong>应当</strong>提供一个微控制器抽象层(MCAL),向更高软件层提供标准化接口。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00162]</span> AUTOSAR 基础软件<strong>应当</strong>提供硬件抽象层(ECU Abstraction Layer)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00168]</span> SW-C <strong>应当</strong>通过基础软件中通用 API 中定义的函数进行测试。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00172]</span> 内置于 BSW 模块的调度策略<strong>应当</strong>与系统中使用的策略兼容。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00300]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>通过明确的名称标识。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00301]</span> 所有 AUTOSAR 基础软件模块<strong>只应当</strong>导入必要的信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00302]</span> 所有 AUTOSAR 基础软件模块<strong>只应当</strong>导出其他模块需要的信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00304]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>使用以下数据类型替代原生 C 数据类型(AUTOSAR 标准类型)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00305]</span> 数据类型<strong>应当</strong>遵循特定命名约定(如 <code>TypeName_t</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00306]</span> AUTOSAR 基础软件模块<strong>应当</strong>是编译器/平台无关的。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00307]</span> 全局变量<strong>应当</strong>遵循命名约定(如 <code>ModuleName_VariableName</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00308]</span> AUTOSAR 基础软件模块<strong>不得</strong>在头文件中定义全局数据,应在 C 文件中定义。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00309]</span> 所有只读全局数据<strong>应当</strong>显式使用 <code>const</code> 关键字标记。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00310]</span> API 命名<strong>应当</strong>遵循约定(如 <code>ModuleName_FunctionName</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00312]</span> 共享代码<strong>应当</strong>是可重入的(re-entrant)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00314]</span> 所有内部驱动模块<strong>应当</strong>将中断帧定义与中断服务例程分离。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00321]</span> AUTOSAR BSW 模块的版本号<strong>应当</strong>按特定规则枚举(major.minor.patch)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00323]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>检查传入 API 参数的有效性。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00325]</span> 中断服务例程和在中断上下文中运行的函数的运行时<strong>应当</strong>保持较短。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00327]</span> 错误值<strong>应当</strong>遵循命名约定。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00330]</span> 在源码使用且运行时关键的情况下,<strong>允许</strong>使用宏代替函数。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00331]</span> 所有基础软件模块<strong>应当</strong>严格分离错误和状态信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00333]</span> 对于每个回调函数,<strong>应当</strong>说明它是否从中断上下文调用。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00334]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>提供一个包含元数据的 XML 文件。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00335]</span> 状态值<strong>应当</strong>遵循命名约定。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00341]</span> 模块文档<strong>应当</strong>包含所有必要的信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00342]</span> <strong>应当</strong>可以使用源代码模块和目标代码模块(甚至是混合形式)构建 AUTOSAR ECU。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00343]</span> 基础软件模块规范和配置的时间单位<strong>应当</strong>优先选择<strong>物理时间单位</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00346]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>至少提供一组基础模块文件。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00347]</span> BSW 驱动不同实例之间<strong>应当</strong>有命名分离。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00348]</span> 所有 AUTOSAR 标准类型和常量<strong>应当</strong>放置在标准类型头文件中(<code>StandardTypes.h</code> / <code>PlatformTypes.h</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00350]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>允许启用/禁用开发错误的检测和报告。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00353]</span> 目标和编译器特定范围的整数类型定义<strong>应当</strong>放置和组织在单个类型头文件中(<code>PlatformTypes.h</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00357]</span> API 调用的成功/失败<strong>应当</strong>使用标准返回类型(<code>Std_ReturnType</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00358]</span> AUTOSAR 基础软件模块实现的 <code>init()</code> 函数的返回类型<strong>应当</strong>为 <code>void</code>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00359]</span> 所有 AUTOSAR 基础软件模块的回调函数<strong>应当</strong>尽可能避免 <code>void</code> 以外的返回类型。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00360]</span> AUTOSAR 基础软件模块的回调函数<strong>允许</strong>有参数。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00361]</span> 所有非标准化的编译器特定关键字的映射<strong>应当</strong>放置在编译器特定类型和关键字头文件中(<code>Compiler.h</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00369]</span> 所有 AUTOSAR 基础软件模块<strong>不得</strong>通过 API 返回特定的开发错误代码。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00371]</span> 对于所有 AUTOSAR 基础软件模块,函数指针作为 API 参数传递<strong>是禁止的</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00373]</span> 每个 AUTOSAR 基础软件模块的主处理函数<strong>应当</strong>根据定义的约定命名(如 <code>ModuleName_MainFunction()</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00374]</span> 所有基础软件模块<strong>应当</strong>提供可读的模块供应商标识(vendor ID)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00377]</span> 基础软件模块可以返回模块特定类型。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00378]</span> AUTOSAR <strong>应当</strong>提供一个布尔类型(<code>boolean</code>)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00379]</span> 所有软件模块<strong>应当</strong>在头文件和模块 XML 描述文件中提供模块标识符。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00409]</span> 所有生产代码错误 ID 符号由 Dem 模块定义,并由其他 BSW 模块从 Dem 配置中获取。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00417]</span> 不属于 SW-C 的软件<strong>应当</strong>仅在 DEM 完全运行后上报错误事件。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00423]</span> 具有 AUTOSAR 接口的 BSW 模块<strong>应当</strong>可以用 SW-C 模板描述。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00424]</span> BSW 模块主处理函数<strong>不得</strong>进入等待状态。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00425]</span> BSW 模块描述模板<strong>应当</strong>提供建模可调度对象的定义触发条件的手段。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00426]</span> BSW 模块<strong>应当</strong>确保在 BSW 模块间共享的数据的一致性。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00427]</span> ISR 函数<strong>应当</strong>在 BSW 模块描述模板中定义和记录。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00428]</span> BSW 模块<strong>应当</strong>说明其主处理函数是否必须按特定顺序或序列执行。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00429]</span> 对 OS 的访问<strong>应当</strong>受限制(仅 BSW 调度器和 RTE 可访问 OS 对象)。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00432]</span> 模块<strong>应当</strong>为读/接收和写/发送数据路径提供独立的主处理函数。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00433]</span> 主处理函数<strong>只应当</strong>由 BSW 调度器提供的任务体调用。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_1_4">5.1.4 关闭操作(Shutdown Operation)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00170]</span> AUTOSAR SW-C <strong>应当</strong>提供关于它们对故障、信号质量、驱动需求的依赖信息。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00336]</span> 基础软件模块<strong>应当</strong>能够关闭。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00375]</span> 基础软件模块<strong>应当</strong>上报唤醒原因。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_1_5">5.1.5 故障操作(Fault Operation)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00024]</span> 头文件<strong>应当</strong>防止多次包含。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00337]</span> 开发错误<strong>应当</strong>分类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00339]</span> 生产相关错误状态<strong>应当</strong>被报告。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00369]</span> (已在 5.1.3 中列出)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00417]</span> (已在 5.1.3 中列出)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00422]</span> 错误状态信息的预去抖在 DEM 中完成。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00452]</span> 运行时错误<strong>应当</strong>分类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00458]</span> 生产错误<strong>应当</strong>分类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00466]</span> 扩展生产错误<strong>应当</strong>分类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00473]</span> 瞬态故障<strong>应当</strong>分类。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00385]</span> 基础软件模块<strong>应当</strong>列出可能的错误通知。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00386]</span> BSW <strong>应当</strong>指定错误检测的配置。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00456]</span> <strong>应当</strong>定义一个头文件以协调 BSW 模块。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00457]</span> 应用软件组件的回调函数<strong>应当</strong>由基础软件调用。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00462]</span> 所有标准化的 AUTOSAR 接口<strong>应当</strong>具有唯一的需求 ID/编号。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00464]</span> 文件名<strong>应当</strong>区分大小写,无论在哪个文件系统中使用。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00469]</span> 生产错误和扩展生产错误的故障检测和恢复。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00470]</span> 生产错误检测的执行频率。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00471]</span> 检测到生产错误时<strong>不得</strong>引起死锁——具备从先前检测到的生产错误恢复的能力。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00472]</span> 避免检测到同一根本原因的两个生产错误。</p>
|
||||
</div>
|
||||
|
||||
<h3 id="s5_2">5.2 非功能需求(Non-Functional Requirements)</h3>
|
||||
|
||||
<h4 id="s5_2_1">5.2.1 时序需求(Timing Requirements)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00328]</span> 所有 AUTOSAR 基础软件模块<strong>应当</strong>避免代码重复。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00478]</span> 主函数的时序限制。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_2_2">5.2.2 资源使用(Resource Usage)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00010]</span> (已在 5.1.3 中列出)</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_2_3">5.2.3 可用性(Usability)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00459]</span> <strong>应当</strong>可以在不同分区中并发执行 BSW 模块提供的服务。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00460]</span> BSW 分布式执行的机制。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s5_2_4">5.2.4 其他工作包产出(Output for other WPs)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00483]</span> BSW 模块<strong>应当</strong>在内部处理缓冲区对齐。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00480]</span> 空指针错误<strong>应当</strong>遵循命名规则。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00481]</span> 无效配置集选择错误<strong>应当</strong>遵循命名规则。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00482]</span> <code>GetVersionInfo</code> 函数<strong>应当</strong>遵循命名规则。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SRS_BSW_00479]</span> 处理外部设备请求的接口。</p>
|
||||
</div>
|
||||
|
||||
<h2 id="s6">6 需求追溯(Requirements traceability)</h2>
|
||||
<p>每条 <code>SRS_BSW_*</code> 需求至少被一个 SWS 规范文档满足。详细的满足关系在 SWS 文档(如 <code>AUTOSAR_SWS_BSWGeneral.pdf</code>、<code>AUTOSAR_SWS_*.pdf</code>)中列出。</p>
|
||||
|
||||
<p>主要追溯原则:</p>
|
||||
<ul>
|
||||
<li>每个 BSW 模块的 SWS 文档明确列出该模块满足的所有 SRS 需求;</li>
|
||||
<li>某些通用 SRS 需求(如命名约定)由所有 BSW 模块共同满足;</li>
|
||||
<li>特定 SRS 需求(如 OS 时间保护)由单个模块(如 OS)满足。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s7">7 变更历史(Change history)</h2>
|
||||
<p>4.4.0 版本变更:</p>
|
||||
<ul>
|
||||
<li>增加了安全事件分类的需求 <code>SRS_BSW_00488</code>;</li>
|
||||
<li>增加了模块初始化错误的需求 <code>SRS_BSW_00487</code>;</li>
|
||||
<li>清理头文件结构;</li>
|
||||
<li>移除过时引用;</li>
|
||||
<li>编辑性修订。</li>
|
||||
</ul>
|
||||
|
||||
<p>4.3.1 版本变更:</p>
|
||||
<ul>
|
||||
<li>头文件生命周期的更新;</li>
|
||||
<li>更新相关标准和规范;</li>
|
||||
<li>编辑性修订。</li>
|
||||
</ul>
|
||||
|
||||
<p>4.3.0 版本变更:</p>
|
||||
<ul>
|
||||
<li>为 C90 添加接口;</li>
|
||||
<li>MISRA 2012 支持更新;</li>
|
||||
<li>移除过时引用;</li>
|
||||
<li>编辑性修订。</li>
|
||||
</ul>
|
||||
|
||||
<p>4.2.2 版本变更:</p>
|
||||
<ul>
|
||||
<li>引入新需求 <code>SRS_BSW_00403</code>、<code>SRS_BSW_00351</code>;</li>
|
||||
<li>修改需求 <code>SRS_BSW_00406</code>、<code>SRS_BSW_00450</code>;</li>
|
||||
<li>调试支持标记为过时。</li>
|
||||
</ul>
|
||||
|
||||
<p>早期版本(4.2.1、4.2.0、4.1.x 等)包含了对 PBL/PBS ECU 配置支持、OSEK 引用更新、配置类改进、需求结构调整等大量变更。完整变更历史见原文第 5–6 页。</p>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>需求清单</strong>:原文 ~100 条 <code>SRS_BSW_NNNNN</code> 需求按主题分组完整列出(配置、初始化、正常运行、关闭、故障、时序、资源、可用性)。</li>
|
||||
<li>✅ <strong>章节结构</strong>:原文 7 章(含变更历史),译文目录完整对应。</li>
|
||||
<li>✅ <strong>需求 ID 保留</strong>:<code>SRS_BSW_00003</code>–<code>SRS_BSW_00488</code>(约 100 条)完整保留编号。</li>
|
||||
<li>✅ <strong>术语对照</strong>:BSW、MCAL、SW-C、RTE、ISR、OS、API、DEM、DET、ECU、MISRA C 2012、CDD、SchM、BswM、EcuM、ComM 等术语与术语表对齐。</li>
|
||||
<li>✅ <strong>命名约定</strong>:<code><Module>_GetVersionInfo()</code>、<code><Module>_MainFunction()</code>、<code><Module>_VariableName</code> 等保留。</li>
|
||||
<li>✅ <strong>配置类</strong>:编译前(Pre-Compile)、链接时(Link-Time)、构建后(Post-Build)三类完整保留。</li>
|
||||
<li>✅ <strong>错误分类</strong>:开发错误、运行时错误、生产错误、扩展生产错误、瞬态故障五类与术语表对齐。</li>
|
||||
<li>⚠ <strong>追溯表省略</strong>:原文 6 节包含 ~100 行 × 3 列的"RS_BRF / SRS_BSW → 满足模块"大型追溯表,译文以概要说明代替。完整对照可查阅原文 PDF。</li>
|
||||
<li>⚠ <strong>变更历史细节</strong>:4.2/4.1/3.x 等早期版本的细节以摘要方式呈现。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_SRS_BSWGeneral.pdf(80 页)· 文档 ID 043
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,505 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>基础软件模块通用规范 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>基础软件模块通用规范(General Specification of Basic Software Modules)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:578</span>
|
||||
<span>🏷 类型:SWS(软件规范)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:85</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_SWS_BSWGeneral.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与功能概述</a>
|
||||
<ul>
|
||||
<li><a href="#s1_1">1.1 追溯</a></li>
|
||||
<li><a href="#s1_2">1.2 文档约定</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a></li>
|
||||
<li><a href="#s4">4 约束与假设</a></li>
|
||||
<li><a href="#s5">5 对其他模块的依赖</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 文件结构</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 需求追溯</a></li>
|
||||
<li><a href="#s7">7 功能规范</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1">7.1 一般实现规范</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1_1">7.1.1 MISRA C 与 C 标准合规</a></li>
|
||||
<li><a href="#s7_1_2">7.1.2 AUTOSAR BSW 需求合规</a></li>
|
||||
<li><a href="#s7_1_3">7.1.3 AUTOSAR 方法论合规</a></li>
|
||||
<li><a href="#s7_1_4">7.1.4 平台无关性与编译器抽象</a></li>
|
||||
<li><a href="#s7_1_5">7.1.5 可配置性</a></li>
|
||||
<li><a href="#s7_1_6">7.1.6 各种命名约定</a></li>
|
||||
<li><a href="#s7_1_7">7.1.7 配置参数</a></li>
|
||||
<li><a href="#s7_1_8">7.1.8 共享代码</a></li>
|
||||
<li><a href="#s7_1_9">7.1.9 全局数据</a></li>
|
||||
<li><a href="#s7_1_10">7.1.10 宏与内联函数的使用</a></li>
|
||||
<li><a href="#s7_1_11">7.1.11 调度函数(主处理函数)的调用</a></li>
|
||||
<li><a href="#s7_1_12">7.1.12 排他区</a></li>
|
||||
<li><a href="#s7_1_13">7.1.13 回调</a></li>
|
||||
<li><a href="#s7_1_14">7.1.14 AUTOSAR 接口</a></li>
|
||||
<li><a href="#s7_1_15">7.1.15 中断服务例程</a></li>
|
||||
<li><a href="#s7_1_16">7.1.16 受限的 OS 功能访问</a></li>
|
||||
<li><a href="#s7_1_17">7.1.17 访问硬件寄存器</a></li>
|
||||
<li><a href="#s7_1_18">7.1.18 数据类型</a></li>
|
||||
<li><a href="#s7_1_19">7.1.19 多分区系统上的分布式执行</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7_2">7.2 错误处理</a>
|
||||
<ul>
|
||||
<li><a href="#s7_2_1">7.2.1 分类</a></li>
|
||||
<li><a href="#s7_2_2">7.2.2 开发错误</a></li>
|
||||
<li><a href="#s7_2_3">7.2.3 运行时错误</a></li>
|
||||
<li><a href="#s7_2_4">7.2.4 瞬态故障</a></li>
|
||||
<li><a href="#s7_2_5">7.2.5 扩展生产错误与生产错误</a></li>
|
||||
<li><a href="#s7_2_6">7.2.6 安全事件</a></li>
|
||||
<li><a href="#s7_2_7">7.2.7 特定主题</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s7_3">7.3 元数据处理</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8">8 API 规范</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1">8.1 导入类型</a></li>
|
||||
<li><a href="#s8_2">8.2 类型定义</a></li>
|
||||
<li><a href="#s8_3">8.3 函数定义</a></li>
|
||||
<li><a href="#s8_4">8.4 回调通知</a></li>
|
||||
<li><a href="#s8_5">8.5 调度函数</a></li>
|
||||
<li><a href="#s8_6">8.6 期望接口</a></li>
|
||||
<li><a href="#s8_7">8.7 服务接口</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s9">9 时序图</a></li>
|
||||
<li><a href="#s10">10 配置规范</a>
|
||||
<ul>
|
||||
<li><a href="#s10_1">10.1 配置规范介绍</a></li>
|
||||
<li><a href="#s10_2">10.2 通用配置规范</a></li>
|
||||
<li><a href="#s10_3">10.3 发布信息</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与功能概述(Introduction and functional overview)</h2>
|
||||
<p>本文档是关于 AUTOSAR 基础软件模块的<strong>通用规范</strong>。它是对各 BSW 模块规范的<strong>补充</strong>,提供了对各种 BSW 模块通用的规范。</p>
|
||||
|
||||
<h3 id="s1_1">1.1 追溯(Traceability)</h3>
|
||||
<p>本文档中的规范项描述了 BSW 模块实现的工作产物,关联到 <code>AUTOSAR General Requirements on Basic Software Modules [3]</code> 中描述的基础软件需求。</p>
|
||||
<p>对于每个 BSW 模块,规范项与基础软件需求之间的追溯在本文档和相应的 BSW 模块规范文档的范围内。参见第 6 章"需求追溯"。</p>
|
||||
<p>BSW 模块实现<strong>必须</strong>保证与本文档及相应 BSW 模块规范文档中的规范项可追溯。</p>
|
||||
<p>某些规范项不适用于每个 BSW 模块。在这种情况下,其描述会明确说明适用条件。如果未提及条件,则该规范项适用于所有 BSW 模块。</p>
|
||||
<p>更多信息参见 AUTOSAR 标准化模板 [13] 中"追溯支持"章节。</p>
|
||||
|
||||
<h3 id="s1_2">1.2 文档约定(Document conventions)</h3>
|
||||
<p>代码示例、符号和其他技术术语通常以<strong>等宽字体</strong>排版,例如 <code>const</code>。</p>
|
||||
<p>AUTOSAR 术语表 [7]、本规范(第 2 章)或相关文档中定义的术语和表达式以<strong>斜体</strong>排版,例如 <em>Module implementation prefix</em>。</p>
|
||||
<p>基础软件需求在文档 SRS BSW General [3] 中描述。这些需求使用 <code>SRS_BSW_<n></code> 引用,其中 <code><n></code> 是需求 ID。例如:<code>SRS_BSW_00009</code>。</p>
|
||||
<p>每个规范项以 <code>[SWS_BSW_<nr>]</code> 开头,其中 <code><nr></code> 是规范项的唯一标识号。该编号后是规范项的标题。规范项描述的范围以半角括号 <code>⌈ ... ⌋</code> 标记,其后是在花括号中的来自 SRS BSW General 的相关需求列表。</p>
|
||||
|
||||
<p><strong>示例</strong>:</p>
|
||||
|
||||
<pre><code>[SWS_BSW_<nr>] Specification item title
|
||||
⌈ Specification item description. ⌋ (SRS_BSW_<nr1>, SRS_BSW_<nr2>)</code></pre>
|
||||
|
||||
<p>对其他 AUTOSAR 文档的规范项引用使用相应文档的约定,例如 <code>[SWS_CANIF_00001]</code>。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>BSW driver</td><td>BSW 驱动:BSW 模块列表 [1] 中"AUTOSAR 软件层"列所列。</td></tr>
|
||||
<tr><td>Camel case</td><td>驼峰命名:本文档不定义具体规则。</td></tr>
|
||||
<tr><td>ISR</td><td>Interrupt Service Routine(中断服务例程)</td></tr>
|
||||
<tr><td>MCAL</td><td>Microcontroller Abstraction Layer(微控制器抽象层)</td></tr>
|
||||
<tr><td>MIP</td><td>Module Implementation Prefix(模块实现前缀)</td></tr>
|
||||
<tr><td>SchM</td><td>BSW Scheduler(BSW 调度器)</td></tr>
|
||||
<tr><td>SFR</td><td>Special Function Register(特殊功能寄存器)</td></tr>
|
||||
<tr><td>VFB</td><td>Virtual Functional Bus(虚拟功能总线)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 输入文档</h3>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList.pdf</code></td></tr>
|
||||
<tr><td>[2]</td><td>Layered Software Architecture</td><td><code>AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf</code></td></tr>
|
||||
<tr><td>[3]</td><td>General Requirements on Basic Software Modules</td><td><code>AUTOSAR_SRS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[4]</td><td>Basic Software Module Description Template</td><td><code>AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf</code></td></tr>
|
||||
<tr><td>[5]</td><td>Specification of ECU Configuration</td><td><code>AUTOSAR_TPS_ECUConfiguration.pdf</code></td></tr>
|
||||
<tr><td>[6]</td><td>Specification of Standard Types</td><td><code>AUTOSAR_SWS_StandardTypes.pdf</code></td></tr>
|
||||
<tr><td>[7]</td><td>AUTOSAR Glossary</td><td>—</td></tr>
|
||||
<tr><td>[8]</td><td>Specification of RTE</td><td><code>AUTOSAR_SWS_RTE.pdf</code></td></tr>
|
||||
<tr><td>[9]</td><td>Specification of Platform Types</td><td><code>AUTOSAR_SWS_PlatformTypes.pdf</code></td></tr>
|
||||
<tr><td>[10]</td><td>Specification of Compiler Abstraction</td><td><code>AUTOSAR_SWS_CompilerAbstraction.pdf</code></td></tr>
|
||||
<tr><td>[11]</td><td>Specification of Communication Stack Types</td><td><code>AUTOSAR_SWS_CommunicationStackTypes.pdf</code></td></tr>
|
||||
<tr><td>[12]</td><td>Specification of Memory Mapping</td><td><code>AUTOSAR_SWS_MemoryMapping.pdf</code></td></tr>
|
||||
<tr><td>[13]</td><td>AUTOSAR Standardization Template</td><td>—</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s3_2">3.2 相关标准与规范</h3>
|
||||
<ul>
|
||||
<li>ISO/IEC 9899:1990 Programming Language – C</li>
|
||||
<li>MISRA C 2012 – Guidelines for the use of the C language in critical systems</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s4">4 约束与假设(Constraints and assumptions)</h2>
|
||||
|
||||
<h4>4.1 限制(Limitations)</h4>
|
||||
<p>本文档定义的是 BSW 模块的通用规范。每个 BSW 模块的具体规范在各自的 SWS 文档中定义。</p>
|
||||
|
||||
<h4>4.2 对汽车领域的适用性(Applicability to car domains)</h4>
|
||||
<p>无限制。</p>
|
||||
|
||||
<h2 id="s5">5 对其他模块的依赖(Dependencies to other modules)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 文件结构(File structure)</h3>
|
||||
|
||||
<h4>5.1.1 模块实现前缀(Module implementation prefix)</h4>
|
||||
<p>每个 BSW 模块都有一个<strong>实现前缀</strong>(Module Implementation Prefix,MIP),形式为 <code><Mip></code>。MIP 是模块短名称(缩写)的驼峰形式,例如:</p>
|
||||
<ul>
|
||||
<li><code>Can</code>(用于 CAN 驱动);</li>
|
||||
<li><code>CanIf</code>(用于 CAN 接口);</li>
|
||||
<li><code>WdgM</code>(用于看门狗管理器)。</li>
|
||||
</ul>
|
||||
|
||||
<h4>5.1.2 模块实现文件(Module implementation files)</h4>
|
||||
<p>每个 BSW 模块<strong>应当</strong>提供以下文件:</p>
|
||||
<ul>
|
||||
<li><code><Mip>.c</code>:模块实现;</li>
|
||||
<li><code><Mip>.h</code>:模块对外接口;</li>
|
||||
<li><code><Mip>_Cfg.h</code>:编译时配置(可选);</li>
|
||||
<li><code><Mip>_Lcfg.c</code>:链接时配置(可选);</li>
|
||||
<li><code><Mip>_PBcfg.c</code>:构建后配置(可选)。</li>
|
||||
</ul>
|
||||
|
||||
<h4>5.1.3 导入与导出信息(Imported and exported information)</h4>
|
||||
<p>每个模块的 <code><Mip>.h</code> <strong>应当</strong>导入其依赖的其他模块的头文件。</p>
|
||||
|
||||
<h4>5.1.4 BSW 模块描述(BSW Module Description)</h4>
|
||||
<p>每个模块有一个对应的 <code>BSW Module Description</code> XML 文件。</p>
|
||||
|
||||
<h4>5.1.5 模块文档(Module documentation)</h4>
|
||||
<p>每个模块应附有用户手册和集成指南。</p>
|
||||
|
||||
<h4>5.1.6 源文件结构(Code file structure)</h4>
|
||||
<p>源文件应包含:</p>
|
||||
<ul>
|
||||
<li>包含头文件;</li>
|
||||
<li>文件版本检查;</li>
|
||||
<li>模块 ID 定义;</li>
|
||||
<li>模块内部数据;</li>
|
||||
<li>模块函数实现。</li>
|
||||
</ul>
|
||||
|
||||
<h4>5.1.7 头文件结构(Header file structure)</h4>
|
||||
<p>头文件应包含:</p>
|
||||
<ul>
|
||||
<li>包含保护;</li>
|
||||
<li>包含必要的头文件;</li>
|
||||
<li>类型定义;</li>
|
||||
<li>宏定义;</li>
|
||||
<li>函数声明。</li>
|
||||
</ul>
|
||||
|
||||
<h4>5.1.8 版本检查(Version check)</h4>
|
||||
<p>模块<strong>应当</strong>使用 <code>SWS_BSW_NNNNN</code> 中的版本检查宏验证所依赖模块的版本。</p>
|
||||
|
||||
<h2 id="s6">6 需求追溯(Requirements traceability)</h2>
|
||||
<p>本文档的 SWS 规范项与 SRS 需求的对应关系详原文 6 章。本文档中约 100+ <code>SWS_BSW_*</code> 规范项满足 SRS_BSWGeneral 中约 100 条 SRS 需求。</p>
|
||||
|
||||
<p>关键追溯(摘录):</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>SWS 规范项</th><th>满足 SRS 需求</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>SWS_BSW_00002</code> 等</td><td>配置规则(<code>SRS_BSW_00167</code>、<code>SRS_BSW_00344</code> 等)</td></tr>
|
||||
<tr><td><code>SWS_BSW_00010</code> 等</td><td>版本与标识(<code>SRS_BSW_00003</code>、<code>SRS_BSW_00379</code>)</td></tr>
|
||||
<tr><td><code>SWS_BSW_00050</code> 等</td><td>初始化(<code>SRS_BSW_00101</code>、<code>SRS_BSW_00406</code>)</td></tr>
|
||||
<tr><td><code>SWS_BSW_10000</code>+ 等</td><td>错误处理(<code>SRS_BSW_00337</code>、<code>SRS_BSW_00452</code>、<code>SRS_BSW_00458</code>、<code>SRS_BSW_00466</code>、<code>SRS_BSW_00473</code>)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s7">7 功能规范(Functional specification)</h2>
|
||||
|
||||
<h3 id="s7_1">7.1 一般实现规范(General implementation specification)</h3>
|
||||
|
||||
<h4 id="s7_1_1">7.1.1 MISRA C 与 C 标准合规(Conformance to MISRA C and C standard)</h4>
|
||||
<p>BSW 模块的 C 代码<strong>应当</strong>遵循 MISRA C 2012 标准。</p>
|
||||
|
||||
<h4 id="s7_1_2">7.1.2 AUTOSAR BSW 需求合规(Conformance to AUTOSAR BSW Requirements)</h4>
|
||||
<p>BSW 模块<strong>应当</strong>满足 AUTOSAR_SRS_BSWGeneral 中的所有适用需求。</p>
|
||||
|
||||
<h4 id="s7_1_3">7.1.3 AUTOSAR 方法论合规(Conformance to AUTOSAR Methodology)</h4>
|
||||
<p>BSW 模块的开发与集成<strong>应当</strong>遵循 AUTOSAR 方法论。</p>
|
||||
|
||||
<h4 id="s7_1_4">7.1.4 平台无关性与编译器抽象(Platform independency and compiler abstraction)</h4>
|
||||
<p>BSW 模块<strong>应当</strong>使用 <code>Compiler.h</code> 和 <code>PlatformTypes.h</code> 实现平台无关性。MCAL 之上的模块代码<strong>不得</strong>使用处理器或编译器特定的关键字。</p>
|
||||
|
||||
<h4 id="s7_1_5">7.1.5 可配置性(Configurability)</h4>
|
||||
<p>BSW 模块<strong>应当</strong>支持以下三种配置类:</p>
|
||||
<ul>
|
||||
<li><strong>编译前(Pre-Compile)</strong>:编译时确定;</li>
|
||||
<li><strong>链接时(Link-Time)</strong>:链接时确定;</li>
|
||||
<li><strong>构建后(Post-Build)</strong>:ECU 启动后可通过标定工具修改。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s7_1_6">7.1.6 命名约定(Naming conventions)</h4>
|
||||
<p>AUTOSAR BSW 模块<strong>应当</strong>遵循以下命名约定:</p>
|
||||
<ul>
|
||||
<li><strong>类型</strong>:<code><Mip>_TypeName_t</code> 或 <code><Mip>_TypeName</code>;</li>
|
||||
<li><strong>宏</strong>:<code><MIP>_MACRO_NAME</code>(大写);</li>
|
||||
<li><strong>全局变量</strong>:<code><Mip>_VariableName</code>;</li>
|
||||
<li><strong>函数</strong>:<code><Mip>_FunctionName()</code>;</li>
|
||||
<li><strong>配置参数</strong>:<code><Mip>_ParameterName</code>;</li>
|
||||
<li><strong>文件</strong>:<code><Mip>.c</code>、<code><Mip>.h</code>;</li>
|
||||
<li><strong>头文件包含</strong>:<code>#include "<Mip>.h"</code>。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s7_1_7">7.1.7 配置参数(Configuration parameters)</h4>
|
||||
<p>每个配置参数<strong>应当</strong>具有:</p>
|
||||
<ul>
|
||||
<li>名称;</li>
|
||||
<li>类型;</li>
|
||||
<li>范围;</li>
|
||||
<li>默认值;</li>
|
||||
<li>配置类。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s7_1_8">7.1.8 共享代码(Shared code)</h4>
|
||||
<p>共享代码<strong>应当</strong>是可重入的。</p>
|
||||
|
||||
<h4 id="s7_1_9">7.1.9 全局数据(Global data)</h4>
|
||||
<p>全局变量<strong>应当</strong>在 C 文件中定义(不在头文件中);只读数据<strong>应当</strong>标记为 <code>const</code>。</p>
|
||||
|
||||
<h4 id="s7_1_10">7.1.10 宏与内联函数的使用(Usage of macros and inline functions)</h4>
|
||||
<p>在运行时关键的代码中<strong>允许</strong>使用宏代替函数。编译器抽象宏 <code>INLINE</code> 和 <code>LOCAL_INLINE</code> 应用于内联函数。</p>
|
||||
|
||||
<h4 id="s7_1_11">7.1.11 调度函数的调用(Calling Scheduled functions)</h4>
|
||||
<p>主处理函数(<code><Mip>_MainFunction()</code>)<strong>只应当</strong>由 BSW 调度器调用。</p>
|
||||
|
||||
<h4 id="s7_1_12">7.1.12 排他区(Exclusive areas)</h4>
|
||||
<p>共享资源的临界区<strong>应当</strong>通过 SchM 或 OS 机制处理。</p>
|
||||
|
||||
<h4 id="s7_1_13">7.1.13 回调(Callouts)</h4>
|
||||
<p>回调函数由模块提供,由其他模块或 RTE 调用。</p>
|
||||
|
||||
<h4 id="s7_1_14">7.1.14 AUTOSAR 接口(AUTOSAR Interfaces)</h4>
|
||||
<p>具有 AUTOSAR 接口的 BSW 模块<strong>应当</strong>可以用 SW-C 模板描述。</p>
|
||||
|
||||
<h4 id="s7_1_15">7.1.15 中断服务例程(Interrupt service routines)</h4>
|
||||
<p>ISR <strong>应当</strong>由 OS、CDD 或硬件相关模块提供。Cat1 ISR 由驱动/应用直接管理;Cat2 ISR 由 OS 管理。</p>
|
||||
|
||||
<h4 id="s7_1_16">7.1.16 受限的 OS 功能访问(Restricted OS functionality access)</h4>
|
||||
<p>只有 BSW 调度器和 RTE 可以使用 OS 对象。BSW 模块的运行时<strong>不得</strong>直接调用 OS 服务(除少数允许的服务外)。</p>
|
||||
|
||||
<h4 id="s7_1_17">7.1.17 访问硬件寄存器(Access to hardware registers)</h4>
|
||||
<p>硬件寄存器<strong>只能</strong>由 MCAL 模块访问。其他模块通过 MCAL 提供的接口访问硬件。</p>
|
||||
|
||||
<h4 id="s7_1_18">7.1.18 数据类型(Data types)</h4>
|
||||
<p>BSW 模块<strong>应当</strong>使用 AUTOSAR 标准数据类型(<code>uint8</code>、<code>uint16</code> 等),而非原生 C 类型。</p>
|
||||
|
||||
<h4 id="s7_1_19">7.1.19 多分区系统上的分布式执行(Distributed execution on multi-partitioned systems)</h4>
|
||||
<p>BSW 模块<strong>可以</strong>分布在多个分区上运行。详细机制见 <code>AUTOSAR_EXP_BSWDistributionGuide</code>。</p>
|
||||
|
||||
<h3 id="s7_2">7.2 错误处理(Error Handling)</h3>
|
||||
|
||||
<h4 id="s7_2_1">7.2.1 分类(Classification)</h4>
|
||||
<p>AUTOSAR 定义以下错误类别:</p>
|
||||
<ul>
|
||||
<li><strong>开发错误(Development Error)</strong>:开发阶段发现的问题;</li>
|
||||
<li><strong>运行时错误(Runtime Error)</strong>:运行时发生的错误;</li>
|
||||
<li><strong>瞬态故障(Transient Fault)</strong>:短暂出现的硬件故障;</li>
|
||||
<li><strong>生产错误(Production Error)</strong>:生产环境发生的错误;</li>
|
||||
<li><strong>扩展生产错误(Extended Production Error)</strong>:带有额外信息的生产错误;</li>
|
||||
<li><strong>安全事件(Security Event)</strong>:安全相关事件。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s7_2_2">7.2.2 开发错误(Development errors)</h4>
|
||||
<p>开发错误通过 <strong>Det</strong>(Default Error Tracer)报告。每个开发错误具有:</p>
|
||||
<ul>
|
||||
<li>模块特定的错误代码;</li>
|
||||
<li>错误名称(如 <code><MIP>_E_PARAM_INVALID</code>);</li>
|
||||
<li>严重性(如 <code>DET_ERROR</code>)。</li>
|
||||
</ul>
|
||||
<p>开发错误在生产构建中应被禁用。</p>
|
||||
|
||||
<h4 id="s7_2_3">7.2.3 运行时错误(Runtime errors)</h4>
|
||||
<p>运行时错误也通过 Det 报告,与开发错误类似,但用于运行时检测到的违反约束情况。</p>
|
||||
|
||||
<h4 id="s7_2_4">7.2.4 瞬态故障(Transient faults)</h4>
|
||||
<p>瞬态故障是短时出现的硬件故障。模块可记录瞬态故障计数,并在超过阈值后升级为生产错误。</p>
|
||||
|
||||
<h4 id="s7_2_5">7.2.5 扩展生产错误与生产错误(Extended production errors and production errors)</h4>
|
||||
<p>生产错误和扩展生产错误通过 <strong>DEM</strong>(Diagnostic Event Manager)报告。模块<strong>应当</strong>使用 <code>Dem_ReportErrorStatus()</code> 上报生产错误,使用 <code>Dem_SetEventStatus()</code> 上报扩展生产错误。</p>
|
||||
|
||||
<h4 id="s7_2_6">7.2.6 安全事件(Security events)</h4>
|
||||
<p>安全事件通过 <strong>IdsM</strong>(Intrusion Detection System Manager)报告,适用于 4.4 引入的安全机制。</p>
|
||||
|
||||
<h4 id="s7_2_7">7.2.7 特定主题(Specific topics)</h4>
|
||||
<p>包括错误 ID 命名规则、错误回调、去抖(debounce)等。</p>
|
||||
|
||||
<h3 id="s7_3">7.3 元数据处理(Meta Data Handling)</h3>
|
||||
<p>BSW 模块<strong>应当</strong>通过 <code>MetaData</code> 提供关于其功能的信息,供 RTE、工具等使用。元数据在 <code>BSW Module Description</code> XML 中定义。</p>
|
||||
|
||||
<h2 id="s8">8 API 规范(API specification)</h2>
|
||||
|
||||
<h3 id="s8_1">8.1 导入类型(Imported types)</h3>
|
||||
<p>每个 BSW 模块<strong>应当</strong>导入其依赖的 AUTOSAR 标准类型(<code>Std_ReturnType</code>、<code>Std_VersionInfoType</code>)和模块特定类型。</p>
|
||||
|
||||
<h3 id="s8_2">8.2 类型定义(Type definitions)</h3>
|
||||
<p>模块特定类型<strong>应当</strong>以 <code><Mip>_TypeName</code> 命名。</p>
|
||||
|
||||
<h3 id="s8_3">8.3 函数定义(Function definitions)</h3>
|
||||
|
||||
<h4>8.3.1 API 函数的一般规范</h4>
|
||||
<p>BSW 模块的 API 函数<strong>应当</strong>遵循:</p>
|
||||
<ul>
|
||||
<li>以 <code><Mip>_FunctionName</code> 命名;</li>
|
||||
<li>首个参数为模块 ID(如 <code>uint8 ModuleId</code>);</li>
|
||||
<li>返回 <code>Std_ReturnType</code>;</li>
|
||||
<li>使用 <code>FUNC()</code> 宏进行声明/定义。</li>
|
||||
</ul>
|
||||
|
||||
<h4>8.3.2 初始化函数</h4>
|
||||
<p>每个模块<strong>应当</strong>提供 <code><Mip>_Init()</code> 函数,用于初始化模块。</p>
|
||||
|
||||
<h4>8.3.3 去初始化函数</h4>
|
||||
<p>每个模块<strong>应当</strong>提供 <code><Mip>_DeInit()</code> 函数(如果适用),用于去初始化。</p>
|
||||
|
||||
<h4>8.3.4 获取版本信息</h4>
|
||||
<p>每个模块<strong>应当</strong>提供 <code><Mip>_GetVersionInfo()</code> 函数,用于返回模块的版本信息。</p>
|
||||
|
||||
<h3 id="s8_4">8.4 回调通知(Callback notifications)</h3>
|
||||
<p>模块可定义回调函数,由其他模块或 RTE 调用。回调函数<strong>应当</strong>在头文件中声明。</p>
|
||||
|
||||
<h3 id="s8_5">8.5 调度函数(Scheduled functions)</h3>
|
||||
<p>模块可声明<strong>主处理函数</strong>(如 <code><Mip>_MainFunction()</code>),由 BSW 调度器周期性调用。</p>
|
||||
|
||||
<h3 id="s8_6">8.6 期望接口(Expected Interfaces)</h3>
|
||||
<p>每个模块<strong>应当</strong>声明它需要从其他模块获得的接口:</p>
|
||||
<ul>
|
||||
<li><strong>必需接口(Mandatory Interfaces)</strong>:模块运行所必需;</li>
|
||||
<li><strong>可选接口(Optional Interfaces)</strong>:仅在某些配置中使用;</li>
|
||||
<li><strong>可配置接口(Configurable Interfaces)</strong>:可在配置中启用/禁用。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s8_7">8.7 服务接口(Service Interfaces)</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s9">9 时序图(Sequence diagrams)</h2>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s10">10 配置规范(Configuration specification)</h2>
|
||||
|
||||
<h3 id="s10_1">10.1 配置规范介绍(Introduction to configuration specification)</h3>
|
||||
|
||||
<h4>10.1.1 配置与配置参数</h4>
|
||||
<p>每个 BSW 模块通过配置工具生成配置参数。</p>
|
||||
|
||||
<h4>10.1.2 变体(Variants)</h4>
|
||||
<p>变体支持同一模块的多个配置实例,例如不同的 ECU 配置。</p>
|
||||
|
||||
<h4>10.1.3 容器(Containers)</h4>
|
||||
<p>容器用于分组相关的配置参数。</p>
|
||||
|
||||
<h4>10.1.4 配置参数表(Configuration parameter tables)</h4>
|
||||
<p>每个容器和参数在 BSW Module Description 中以表格形式定义。</p>
|
||||
|
||||
<h4>10.1.5 配置类标签(Configuration class labels)</h4>
|
||||
<p>三种配置类:</p>
|
||||
<ul>
|
||||
<li><strong>Pre-Compile</strong>:编译时确定;</li>
|
||||
<li><strong>Link-Time</strong>:链接时确定;</li>
|
||||
<li><strong>Post-Build</strong>:运行时可修改。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s10_2">10.2 通用配置规范(General configuration specification)</h3>
|
||||
|
||||
<h4>10.2.1 配置文件(Configuration files)</h4>
|
||||
<p>每个模块的配置文件<strong>应当</strong>由配置工具生成,并符合 BSW Module Description 模板。</p>
|
||||
|
||||
<h4>10.2.2 配置参数的实现名称(Implementation names for configuration parameters)</h4>
|
||||
<p>配置参数的 C 实现名<strong>应当</strong>遵循 <code><Mip>_Conf_ElementName</code> 模式。</p>
|
||||
|
||||
<h4>10.2.3 编译前配置(Pre-compile time configuration)</h4>
|
||||
<p>通过 <code>#define</code> 实现。</p>
|
||||
|
||||
<h4>10.2.4 链接时配置(Link time configuration)</h4>
|
||||
<p>通过链接时的 C 对象实现。</p>
|
||||
|
||||
<h4>10.2.5 构建后配置(Post-build time configuration)</h4>
|
||||
<p>通过构建后加载的数据结构实现。</p>
|
||||
|
||||
<h4>10.2.6 配置变体(Configuration variants)</h4>
|
||||
<p>每个模块可定义多个<strong>配置变体</strong>,例如 <code>VariantPreCompile</code>、<code>VariantLinkTime</code>、<code>VariantPostBuild</code>。</p>
|
||||
|
||||
<h3 id="s10_3">10.3 发布信息(Published Information)</h3>
|
||||
<p>每个模块<strong>应当</strong>发布以下标准信息:</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>发布参数</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code><Mip>_PUBLISHED-INFORMATION</code></td><td>发布信息的版本</td></tr>
|
||||
<tr><td><code><MIP>_MODULE_ID</code></td><td>模块 ID(uint16)</td></tr>
|
||||
<tr><td><code><MIP>_VENDOR_ID</code></td><td>供应商标识(uint16)</td></tr>
|
||||
<tr><td><code><MIP>_SW_MAJOR_VERSION</code></td><td>软件主版本号</td></tr>
|
||||
<tr><td><code><MIP>_SW_MINOR_VERSION</code></td><td>软件次版本号</td></tr>
|
||||
<tr><td><code><MIP>_SW_PATCH_VERSION</code></td><td>软件补丁版本号</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 10 章 + 30+ 子节,译文目录完整对应(1–10 章;5.1、7.1.1–7.1.19、7.2.1–7.2.7、8.1–8.7、10.1–10.3)。</li>
|
||||
<li>✅ <strong>核心规范</strong>:MISRA C 2012 合规、命名约定、文件结构、配置类、错误分类、API 规范、发布参数等核心内容完整翻译。</li>
|
||||
<li>✅ <strong>命名约定</strong>:<code><Mip>_TypeName_t</code>、<code><MIP>_MACRO_NAME</code>、<code><Mip>_VariableName</code>、<code><Mip>_FunctionName()</code> 等保留。</li>
|
||||
<li>✅ <strong>配置类</strong>:Pre-Compile、Link-Time、Post-Build 三类完整保留。</li>
|
||||
<li>✅ <strong>错误分类</strong>:开发、运行时、瞬态、生产、扩展生产、安全事件六类与术语表对齐。</li>
|
||||
<li>✅ <strong>标准 API</strong>:<code><Mip>_Init()</code>、<code><Mip>_DeInit()</code>、<code><Mip>_GetVersionInfo()</code>、<code><Mip>_MainFunction()</code> 等完整保留。</li>
|
||||
<li>✅ <strong>发布参数</strong>:<code><MIP>_MODULE_ID</code>、<code><MIP>_VENDOR_ID</code>、<code><MIP>_SW_*_VERSION</code> 完整保留。</li>
|
||||
<li>✅ <strong>追溯</strong>:~100 条 SWS 规范项与 SRS 需求的对应关系以摘录表格展示。</li>
|
||||
<li>⚠ <strong>详细 SWS 规范项</strong>:原文 6/7/8 章中包含 ~100 条 <code>SWS_BSW_NNNNN</code> 规范项,译文以概要描述呈现主要类别,详细内容可查阅原文 PDF。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_SWS_BSWGeneral.pdf(85 页)· 文档 ID 578
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,470 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>通信栈类型规范 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>通信栈类型规范(Specification of Communication Stack Types)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:050</span>
|
||||
<span>🏷 类型:SWS(软件规范)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:26</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_SWS_CommunicationStackTypes.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与功能概述</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a>
|
||||
<ul>
|
||||
<li><a href="#s3_1">3.1 输入文档</a></li>
|
||||
<li><a href="#s3_2">3.2 相关标准与规范</a></li>
|
||||
<li><a href="#s3_3">3.3 相关规范</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s4">4 约束与假设</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 限制</a></li>
|
||||
<li><a href="#s4_2">4.2 对汽车领域的适用性</a></li>
|
||||
<li><a href="#s4_3">4.3 对功能安全相关环境的适用性</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 软件架构</a>
|
||||
<ul><li><a href="#s5_1">5.1 对其他模块的依赖</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 需求追溯</a></li>
|
||||
<li><a href="#s7">7 功能规范</a>
|
||||
<ul><li><a href="#s7_1">7.1 通用问题</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s8">8 API 规范</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1">8.1 类型定义</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1_1">8.1.1 <code>PduIdType</code></a></li>
|
||||
<li><a href="#s8_1_2">8.1.2 <code>PduLengthType</code></a></li>
|
||||
<li><a href="#s8_1_3">8.1.3 <code>PduInfoType</code></a></li>
|
||||
<li><a href="#s8_1_4">8.1.4 <code>PNCHandleType</code></a></li>
|
||||
<li><a href="#s8_1_5">8.1.5 <code>TPParameterType</code></a></li>
|
||||
<li><a href="#s8_1_6">8.1.6 <code>BufReq_ReturnType</code></a></li>
|
||||
<li><a href="#s8_1_7">8.1.7 <code>TpDataStateType</code></a></li>
|
||||
<li><a href="#s8_1_8">8.1.8 <code>RetryInfoType</code></a></li>
|
||||
<li><a href="#s8_1_9">8.1.9 <code>NetworkHandleType</code></a></li>
|
||||
<li><a href="#s8_1_10">8.1.10 <code>IcomConfigIdType</code></a></li>
|
||||
<li><a href="#s8_1_11">8.1.11 <code>IcomSwitch_ErrorType</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8_2">8.2 函数定义</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s9">9 时序图</a></li>
|
||||
<li><a href="#s10">10 配置规范</a></li>
|
||||
<li><a href="#s11">11 不适用的需求</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与功能概述(Introduction and functional overview)</h2>
|
||||
<p>本规范定义了 AUTOSAR 通信栈类型头文件。它包含所有在基础软件<strong>通信栈</strong>多个模块中复用的类型,以及所有与平台和编译器无关的基础软件模块类型。</p>
|
||||
<p><strong>强烈推荐</strong>在 AUTOSAR 社区内统一使用这些通信栈类型文件,以保证类型的唯一性,并避免从供应商 A 切换到供应商 B 时类型发生变化。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
<p>仅在本文件局部使用、因而未收录到 AUTOSAR 术语表中的缩略语与术语,必须在本节"局部术语表"中列出。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>API</td><td>Application Programming Interface(应用程序编程接口)</td></tr>
|
||||
<tr><td>DCM</td><td>Diagnostic Communication Manager(诊断通信管理器)</td></tr>
|
||||
<tr><td>I-PDU</td><td>Interaction Layer PDU(交互层 PDU)。在 AUTOSAR 中,交互层等同于"通信服务层"(Communication Services Layer)。</td></tr>
|
||||
<tr><td>L-PDU</td><td>Data Link Layer PDU(数据链路层 PDU)。在 AUTOSAR 中,数据链路层等同于"通信硬件抽象层"和"微控制器抽象层"。</td></tr>
|
||||
<tr><td>N-PDU</td><td>Network Layer PDU(网络层 PDU)。在 AUTOSAR 中,网络层等同于"传输协议"。</td></tr>
|
||||
<tr><td>OSEK/VDX</td><td>Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug(汽车电子开放系统及其接口)。1993 年 5 月由德国汽车行业联合发起,目标是为车辆分布式控制单元提供开放式架构标准。初始成员:BMW、Bosch、DaimlerChrysler、Opel、Siemens、VW 及卡尔斯鲁厄大学 IIIT;1994 年法国 PSA 与 Renault 携 VDX(Vehicle Distributed eXecutive)方案加入。</td></tr>
|
||||
<tr><td>PDU</td><td>Protocol Data Unit(协议数据单元)</td></tr>
|
||||
<tr><td>SDU</td><td>Service Data Unit(服务数据单元),即 PDU 的有效载荷</td></tr>
|
||||
<tr><td>TP</td><td>Transport Protocol(传输协议)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩写</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Com</td><td>Communication(通信)</td></tr>
|
||||
<tr><td>EcuC</td><td>ECU Configuration(ECU 配置)</td></tr>
|
||||
<tr><td>e.g.</td><td>[lat.] exempli gratia = [eng.] for example(例如)</td></tr>
|
||||
<tr><td>i.e.</td><td>[lat.] it est = [eng.] that is(即)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 输入文档</h3>
|
||||
<table>
|
||||
<thead><tr><th>编号 / 标签</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1] GeneralSRS</td><td>General Requirements on Basic Software Modules</td><td><code>AUTOSAR_SRS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[2] SRSSPAL</td><td>General Requirements on SPAL</td><td><code>AUTOSAR_SRS_SPALGeneral.pdf</code></td></tr>
|
||||
<tr><td>[3] StdTypes</td><td>Specification of Standard Types</td><td><code>AUTOSAR_SWS_StandardTypes.pdf</code></td></tr>
|
||||
<tr><td>[4] PltfTypes</td><td>Specification of Platform Types</td><td><code>AUTOSAR_SWS_PlatformTypes.pdf</code></td></tr>
|
||||
<tr><td>[5] CompTypes</td><td>Specification of Compiler Abstraction</td><td><code>AUTOSAR_SWS_CompilerAbstraction.pdf</code></td></tr>
|
||||
<tr><td>[6] CANTP</td><td>Specification of CAN Transport Layer</td><td><code>AUTOSAR_SWS_CANTransportLayer.pdf</code></td></tr>
|
||||
<tr><td>[7] FlexRayTP</td><td>Specification of FlexRay Transport Layer</td><td><code>AUTOSAR_SWS_FlexRayTransportLayer.pdf</code></td></tr>
|
||||
<tr><td>[8] CANTRCV</td><td>Specification of CAN Transceiver Driver</td><td><code>AUTOSAR_SWS_CANTransceiverDriver.pdf</code></td></tr>
|
||||
<tr><td>[9] FRTRCV</td><td>Specification of FlexRay Transceiver Driver</td><td><code>AUTOSAR_SWS_FlexRayTransceiverDriver.pdf</code></td></tr>
|
||||
<tr><td>[10] BSMDT</td><td>Basic Software Module Description Template</td><td><code>AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf</code></td></tr>
|
||||
<tr><td>[11] BSWModule</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList</code></td></tr>
|
||||
<tr><td>[12] BSWGeneral</td><td>General Specification of Basic Software Modules</td><td><code>AUTOSAR_SWS_BSWGeneral.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s3_2">3.2 相关标准与规范</h3>
|
||||
<ul>
|
||||
<li><strong>[CProgLang]</strong>:ISO/IEC 9899:1990 Programming Language – C</li>
|
||||
<li><strong>[ISONM]</strong>:ISO/IEC 15765-2; 2003 Diagnostics on Controller Area Networks (CAN) – Network layer services</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s3_3">3.3 相关规范</h3>
|
||||
<p>AUTOSAR 提供了通用基础软件模块规范(参见 3.1 节 [12],SWS BSW General),该规范对通信栈类型同样适用。</p>
|
||||
<p>因此,<strong>SWS BSW General 应被视为通信栈类型的附加且必需的规范</strong>。</p>
|
||||
|
||||
<h2 id="s4">4 约束与假设(Constraints and assumptions)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 限制(Limitations)</h3>
|
||||
<p>无限制。</p>
|
||||
|
||||
<h3 id="s4_2">4.2 对汽车领域的适用性(Applicability to car domains)</h3>
|
||||
<p>无限制。</p>
|
||||
|
||||
<h3 id="s4_3">4.3 对功能安全相关环境的适用性(Applicability to safety related environments)</h3>
|
||||
<p>无限制,因为本规范的主题是定义类型的头文件,它<strong>不包含或实现任何功能</strong>。</p>
|
||||
|
||||
<h2 id="s5">5 软件架构(Software Architecture)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 对其他模块的依赖(Dependencies to other modules)</h3>
|
||||
<p>通信栈类型头文件基于平台类型 [PltfTypes](<code>PlatformTypes.h</code>)和编译器头文件 [CompTypes](<code>Compiler.h</code>)定义通信类型。为防止头文件被多次包含,通信栈头文件包含标准类型头文件 [StdTypes],而后者已经包含了上述两个文件。</p>
|
||||
|
||||
<h2 id="s6">6 需求追溯(Requirements traceability)</h2>
|
||||
<p>本规范引用了大量 SRS 需求,绝大多数通过 <code>SWS_Comtype_NA_0</code>–<code>SWS_Comtype_NA_5</code> 声明"不适用"(详见 <a href="#s11">第 11 节</a>)。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>SRS 需求</th><th>由以下满足</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>配置类相关(无配置参数):<code>SRS_BSW_00158</code>、<code>SRS_BSW_00159</code>、<code>SRS_BSW_00160</code>、<code>SRS_BSW_00167</code>、<code>SRS_BSW_00171</code>、<code>SRS_BSW_00342</code>、<code>SRS_BSW_00343</code>、<code>SRS_BSW_00344</code>、<code>SRS_BSW_00345</code>、<code>SRS_BSW_00346</code>、<code>SRS_BSW_00380</code>、<code>SRS_BSW_00381</code>、<code>SRS_BSW_00383</code>、<code>SRS_BSW_00388</code>、<code>SRS_BSW_00389</code>、<code>SRS_BSW_00390</code>、<code>SRS_BSW_00392</code>、<code>SRS_BSW_00393</code>、<code>SRS_BSW_00394</code>、<code>SRS_BSW_00395</code>、<code>SRS_BSW_00396</code>、<code>SRS_BSW_00397</code>、<code>SRS_BSW_00398</code>、<code>SRS_BSW_00399</code>、<code>SRS_BSW_00400</code>、<code>SRS_BSW_00401</code>、<code>SRS_BSW_00404</code>、<code>SRS_BSW_00405</code>、<code>SRS_BSW_00408</code>、<code>SRS_BSW_00412</code></td><td><code>SWS_Comtype_NA_0</code></td></tr>
|
||||
<tr><td>SW-C 依赖相关:<code>SRS_BSW_00168</code>、<code>SRS_BSW_00170</code>、<code>SRS_BSW_00423</code></td><td><code>SWS_Comtype_NA_1</code></td></tr>
|
||||
<tr><td>中断/驱动/OS 相关(无中断实现):<code>SRS_BSW_00005</code>、<code>SRS_BSW_00101</code>、<code>SRS_BSW_00161</code>、<code>SRS_BSW_00162</code>、<code>SRS_BSW_00164</code>、<code>SRS_BSW_00172</code>、<code>SRS_BSW_00314</code>、<code>SRS_BSW_00325</code>、<code>SRS_BSW_00347</code>、<code>SRS_BSW_00361</code>、<code>SRS_BSW_00375</code>、<code>SRS_BSW_00406</code>、<code>SRS_BSW_00410</code>、<code>SRS_BSW_00413</code>、<code>SRS_BSW_00416</code>、<code>SRS_BSW_00424</code>、<code>SRS_BSW_00425</code>、<code>SRS_BSW_00426</code>、<code>SRS_BSW_00427</code>、<code>SRS_BSW_00428</code>、<code>SRS_BSW_00429</code></td><td><code>SWS_Comtype_NA_2</code></td></tr>
|
||||
<tr><td>命名/类型/API 等通用规范:<code>SRS_BSW_00006</code>、<code>SRS_BSW_00007</code>、<code>SRS_BSW_00009</code>、<code>SRS_BSW_00010</code>、<code>SRS_BSW_00300</code>、<code>SRS_BSW_00301</code>、<code>SRS_BSW_00302</code>、<code>SRS_BSW_00304</code>、<code>SRS_BSW_00306</code>、<code>SRS_BSW_00307</code>、<code>SRS_BSW_00308</code>、<code>SRS_BSW_00309</code>、<code>SRS_BSW_00310</code>、<code>SRS_BSW_00312</code>、<code>SRS_BSW_00321</code>、<code>SRS_BSW_00323</code>、<code>SRS_BSW_00330</code>、<code>SRS_BSW_00331</code>、<code>SRS_BSW_00333</code>、<code>SRS_BSW_00334</code>、<code>SRS_BSW_00335</code>、<code>SRS_BSW_00341</code>、<code>SRS_BSW_00348</code>、<code>SRS_BSW_00353</code>、<code>SRS_BSW_00357</code>、<code>SRS_BSW_00358</code>、<code>SRS_BSW_00359</code>、<code>SRS_BSW_00360</code>、<code>SRS_BSW_00371</code>、<code>SRS_BSW_00373</code>、<code>SRS_BSW_00374</code>、<code>SRS_BSW_00377</code>、<code>SRS_BSW_00378</code>、<code>SRS_BSW_00379</code>、<code>SRS_BSW_00407</code>、<code>SRS_BSW_00411</code>、<code>SRS_BSW_00414</code>、<code>SRS_BSW_00415</code>、<code>SRS_BSW_00432</code>、<code>SRS_BSW_00433</code>、<code>SRS_BSW_00328</code></td><td><code>SWS_Comtype_NA_3</code></td></tr>
|
||||
<tr><td>关闭功能:<code>SRS_BSW_00336</code></td><td><code>SWS_Comtype_NA_4</code></td></tr>
|
||||
<tr><td>错误处理:<code>SRS_BSW_00327</code>、<code>SRS_BSW_00337</code>、<code>SRS_BSW_00339</code>、<code>SRS_BSW_00350</code>、<code>SRS_BSW_00369</code>、<code>SRS_BSW_00385</code>、<code>SRS_BSW_00386</code>、<code>SRS_BSW_00409</code>、<code>SRS_BSW_00417</code>、<code>SRS_BSW_00422</code></td><td><code>SWS_Comtype_NA_5</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s7">7 功能规范(Functional specification)</h2>
|
||||
|
||||
<h3 id="s7_1">7.1 通用问题(General issues)</h3>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00004]</span></p>
|
||||
<p>本文件<strong>不得</strong>添加任何项目或供应商特定的扩展。任何扩展都将使 AUTOSAR 一致性失效。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00015]</span></p>
|
||||
<p>由于许多通信栈类型依赖于具体的 ECU,<strong>本文件应</strong>根据每个 ECU 的具体配置<strong>独立生成</strong>。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00030]</span></p>
|
||||
<p><code>PduIdType</code> 和 <code>PduLengthType</code> 的取值<strong>应当</strong>分别派生自 EcuC 虚拟层中 <code>EcuCPduCollection</code> 容器的 <code>PduIdTypeEnum</code> 和 <code>PduLengthTypeEnum</code>。</p>
|
||||
</div>
|
||||
|
||||
<h2 id="s8">8 API 规范(API specification)</h2>
|
||||
|
||||
<h3 id="s8_1">8.1 类型定义(Type definitions)</h3>
|
||||
|
||||
<h4 id="s8_1_1">8.1.1 <code>PduIdType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00005]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>PduIdType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td><code>uint8</code>, <code>uint16</code></td></tr>
|
||||
<tr><th>取值(Range)</th><td>0...<<code>PduIdmax</code>> —— 从零开始的整数。<br>该全局类型的大小取决于一个软件模块内使用的最大 PDU 数。此参数由生成工具根据 EcuC 虚拟层中配置的值生成,并写入 <code>ComStack_Cfg.h</code> 文件。<br><strong>示例</strong>:<br>· 若<strong>无</strong>模块处理的 PDU 超过 256 个,可设为 <code>uint8</code>。<br>· 若至少一个模块处理超过 256 个 PDU,则必须全局设为 <code>uint16</code>。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>该类型在整个 AUTOSAR 通信栈中使用,<strong>不包含</strong>总线驱动。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00006]</span></p>
|
||||
<p>此类型的变量用作软件模块(或其集合)内 PDU 的唯一标识符,也用于两个软件模块之间的交互——此时使用目标模块对应的 PduId 进行引用。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00007]</span></p>
|
||||
<p>为支持在软件模块内进行表索引,此类型的变量<strong>应当</strong>从零开始且连续。模块内可以有多个 PduId 范围,每种操作类型(如发送与接收)对应一个范围。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00014]</span></p>
|
||||
<p><code>PduIdmax</code>(一个 PduId 范围的最大值)为该模块中相应操作类型所处理的 PDU 数减 1。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_2">8.1.2 <code>PduLengthType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00008]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>PduLengthType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td><code>uint8</code>, <code>uint16</code>, <code>uint32</code></td></tr>
|
||||
<tr><th>取值(Range)</th><td>0...<<code>PduLengthmax</code>> —— 从零开始的整数。<br>该全局类型的大小取决于一个 ECU 所发送 PDU 的最大长度。此参数由生成工具根据 EcuC 虚拟层中配置的值生成,并写入 <code>ComStack_Cfg.h</code> 文件。<br><strong>示例</strong>:<br>· 若<strong>不使用分段传输</strong>,长度取决于底层通信系统单帧的最大有效载荷(FlexRay 最大为 255,因此使用 <code>uint8</code>)。<br>· 若使用分段传输,则取决于分段 N-PDU 的最大长度(通常使用 <code>uint16</code>)。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>该类型<strong>应当</strong>在一个 ECU 的整个 AUTOSAR 通信栈中使用,<strong>不包含</strong>总线驱动。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00010]</span></p>
|
||||
<p>此类型的变量用作 PDU 的长度信息。长度信息以<strong>字节数</strong>给出。</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_00017]</span></p>
|
||||
<p><code>PduLengthmax</code>(PDU 的最大长度)是该 ECU 所发送最大(可能分段的)PDU 的长度。</p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_3">8.1.3 <code>PduInfoType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00011]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>PduInfoType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Structure(结构体)</td></tr>
|
||||
<tr><th rowspan="3">元素(Element)</th><td><code>uint8* SduDataPtr</code> 指向 PDU 的 SDU(即有效载荷数据)的指针。该指针的类型取决于编译时使用的内存模型。</td></tr>
|
||||
<tr><td><code>uint8* MetaDataPtr</code> 指向 PDU 的元数据(例如 CAN ID、socket ID、诊断地址)的指针,由一系列元数据项组成。每个 PDU 的元数据项的长度和类型在配置时静态确定。超过 8 位的元数据项使用平台字节序。</td></tr>
|
||||
<tr><td><code>PduLengthType SduLength</code> SDU 的字节长度。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>此类型的变量<strong>应当</strong>用于存储任意类型 PDU 的基本信息,即:一个指向其 SDU(有效载荷)的指针变量、一个指向 PDU 元数据的指针、以及 SDU 对应的字节长度。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_4">8.1.4 <code>PNCHandleType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00036]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>PNCHandleType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td><code>uint8</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td>用于存储部分网络(Partial Network)集群的标识符。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_5">8.1.5 <code>TPParameterType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00031]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>TPParameterType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="3">取值(Range)</th><td><code>TP_STMIN</code> <code>0x00</code> Separation Time(分隔时间)</td></tr>
|
||||
<tr><td><code>TP_BS</code> <code>0x01</code> Block Size(块大小)</td></tr>
|
||||
<tr><td><code>TP_BC</code> <code>0x02</code> FlexRay 传输协议模块中使用的带宽控制参数</td></tr>
|
||||
<tr><th>说明(Description)</th><td>指定要修改其值的参数(BS 或 STmin)。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_6">8.1.6 <code>BufReq_ReturnType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00012]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>BufReq_ReturnType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="4">取值(Range)</th><td><code>BUFREQ_OK</code> <code>0x00</code> 缓冲区请求成功完成。该状态的取值必须为 0。</td></tr>
|
||||
<tr><td><code>BUFREQ_E_NOT_OK</code> <code>0x01</code> 缓冲区请求不成功,无法访问缓冲区。该状态的取值必须为 1。</td></tr>
|
||||
<tr><td><code>BUFREQ_E_BUSY</code> <code>0x02</code> 暂时无可用缓冲区。由请求方在一段时间后重试。该状态的取值必须为 2。</td></tr>
|
||||
<tr><td><code>BUFREQ_E_OVFL</code> <code>0x03</code> 无法提供所需长度的缓冲区。该状态的取值必须为 3。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>此类型的变量<strong>应当</strong>用于存储缓冲区请求的结果。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_7">8.1.7 <code>TpDataStateType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00027]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>TpDataStateType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="3">取值(Range)</th><td><code>TP_DATACONF</code> <code>0x00</code> 表示到目前为止已复制的数据都已确认,可以从 TP 缓冲区移除。本次 API 调用复制的数据除外,将在之后确认。</td></tr>
|
||||
<tr><td><code>TP_DATARETRY</code> <code>0x01</code> 表示本次 API 调用应重新复制已复制的数据以从错误中恢复。此时 <code>TxTpDataCnt</code> 指定本次 API 调用要复制的第一个字节的偏移。</td></tr>
|
||||
<tr><td><code>TP_CONFPENDING</code> <code>0x02</code> 表示之前复制的数据必须保留在 TP 中。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>此类型的变量<strong>应当</strong>用于存储 TP 缓冲区的状态。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_8">8.1.8 <code>RetryInfoType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00037]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>RetryInfoType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Structure(结构体)</td></tr>
|
||||
<tr><th rowspan="2">元素(Element)</th><td><code>TpDataStateType TpDataState</code> 用于存储 TP 缓冲区状态的枚举类型。</td></tr>
|
||||
<tr><td><code>PduLengthType TxTpDataCnt</code> 从当前位置开始的偏移,标识需要重传的字节数。</td></tr>
|
||||
<tr><th>说明(Description)</th><td>此类型的变量<strong>应当</strong>用于存储 TP 缓冲区处理的相关信息。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_9">8.1.9 <code>NetworkHandleType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00038]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>NetworkHandleType</code></td></tr>
|
||||
<tr><th>种类(Kind)</th><td>Type(类型)</td></tr>
|
||||
<tr><th>派生自(Derived from)</th><td><code>uint8</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>NetworkHandleType</code> 类型的变量<strong>应当</strong>用于存储通信通道的标识符。</td></tr>
|
||||
<tr><th>取值(Range)</th><td>0..255 从零开始的整数</td></tr>
|
||||
<tr><th>变化(Variation)</th><td>—</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_10">8.1.10 <code>IcomConfigIdType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00039]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>IcomConfigIdType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td><code>uint8</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>IcomConfigIdType</code> 定义配置 ID。ID 为 0 表示默认配置。ID 大于 0 <strong>应当</strong>用于识别"拟网络(Pretended Networking)"的一种配置。允许存在多种配置。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_11">8.1.11 <code>IcomSwitch_ErrorType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMTYPE_00040]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>IcomSwitch_ErrorType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="2">取值(Range)</th><td><code>ICOM_SWITCH_E_OK</code> <code>0x00</code> 拟网络的激活成功。</td></tr>
|
||||
<tr><td><code>ICOM_SWITCH_E_FAILED</code> <code>0x01</code> 拟网络的激活失败。</td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>IcomSwitch_ErrorType</code> 定义激活或去激活"拟网络"时可能发生的错误。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>ComStackTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_2">8.2 函数定义(Function definitions)</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s9">9 时序图(Sequence diagrams)</h2>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s10">10 配置规范(Configuration specification)</h2>
|
||||
|
||||
<h3 id="s10_1">10.1 发布参数(Published parameters)</h3>
|
||||
<p>详细信息参见 SWS_BSWGeneral [12] 的 10.3 节"发布信息"。</p>
|
||||
|
||||
<h2 id="s11">11 不适用的需求(Not applicable requirements)</h2>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_0]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 既无可配置参数,也未引用其他模块的配置参数。</p>
|
||||
<p>(<code>SRS_BSW_00344</code>、<code>SRS_BSW_00404</code>、<code>SRS_BSW_00405</code>、<code>SRS_BSW_00345</code>、<code>SRS_BSW_00159</code>、<code>SRS_BSW_00167</code>、<code>SRS_BSW_00171</code>、<code>SRS_BSW_00380</code>、<code>SRS_BSW_00381</code>、<code>SRS_BSW_00412</code>、<code>SRS_BSW_00383</code>、<code>SRS_BSW_00388</code>、<code>SRS_BSW_00389</code>、<code>SRS_BSW_00390</code>、<code>SRS_BSW_00392</code>、<code>SRS_BSW_00393</code>、<code>SRS_BSW_00394</code>、<code>SRS_BSW_00395</code>、<code>SRS_BSW_00396</code>、<code>SRS_BSW_00397</code>、<code>SRS_BSW_00398</code>、<code>SRS_BSW_00399</code>、<code>SRS_BSW_00400</code>、<code>SRS_BSW_00342</code>、<code>SRS_BSW_00343</code>、<code>SRS_BSW_00160</code>、<code>SRS_BSW_00408</code>、<code>SRS_BSW_00346</code>、<code>SRS_BSW_00158</code>、<code>SRS_BSW_00401</code>)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_1]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 与软件组件(SW-C)之间<strong>没有依赖关系</strong>。</p>
|
||||
<p>(<code>SRS_BSW_00170</code>、<code>SRS_BSW_00168</code>、<code>SRS_BSW_00423</code>)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_2]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 不实现任何中断,不是驱动或 MCAL 抽象层,也未直接访问 OS。</p>
|
||||
<p>(<code>SRS_BSW_00375</code>、<code>SRS_BSW_00101</code>、<code>SRS_BSW_00406</code>、<code>SRS_BSW_00416</code>、<code>SRS_BSW_00424</code>、<code>SRS_BSW_00425</code>、<code>SRS_BSW_00426</code>、<code>SRS_BSW_00427</code>、<code>SRS_BSW_00428</code>、<code>SRS_BSW_00429</code>、<code>SRS_BSW_00161</code>、<code>SRS_BSW_00162</code>、<code>SRS_BSW_00005</code>、<code>SRS_BSW_00164</code>、<code>SRS_BSW_00325</code>、<code>SRS_BSW_00413</code>、<code>SRS_BSW_00347</code>、<code>SRS_BSW_00314</code>、<code>SRS_BSW_00410</code>、<code>SRS_BSW_00361</code>、<code>SRS_BSW_00172</code>)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_3]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 不实现版本检查、主函数、API、标准类型等。</p>
|
||||
<p>(<code>SRS_BSW_00323</code>、<code>SRS_BSW_00415</code>、<code>SRS_BSW_00007</code>、<code>SRS_BSW_00300</code>、<code>SRS_BSW_00307</code>、<code>SRS_BSW_00310</code>、<code>SRS_BSW_00373</code>、<code>SRS_BSW_00335</code>、<code>SRS_BSW_00411</code>、<code>SRS_BSW_00348</code>、<code>SRS_BSW_00353</code>、<code>SRS_BSW_00301</code>、<code>SRS_BSW_00302</code>、<code>SRS_BSW_00328</code>、<code>SRS_BSW_00312</code>、<code>SRS_BSW_00006</code>、<code>SRS_BSW_00357</code>、<code>SRS_BSW_00377</code>、<code>SRS_BSW_00304</code>、<code>SRS_BSW_00378</code>、<code>SRS_BSW_00306</code>、<code>SRS_BSW_00308</code>、<code>SRS_BSW_00309</code>、<code>SRS_BSW_00371</code>、<code>SRS_BSW_00358</code>、<code>SRS_BSW_00407</code>、<code>SRS_BSW_00432</code>、<code>SRS_BSW_00433</code>、<code>SRS_BSW_00414</code>、<code>SRS_BSW_00359</code>、<code>SRS_BSW_00360</code>、<code>SRS_BSW_00330</code>、<code>SRS_BSW_00331</code>、<code>SRS_BSW_00009</code>、<code>SRS_BSW_00010</code>、<code>SRS_BSW_00333</code>、<code>SRS_BSW_00374</code>、<code>SRS_BSW_00379</code>、<code>SRS_BSW_00321</code>、<code>SRS_BSW_00341</code>、<code>SRS_BSW_00334</code>)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_4]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 不包含任何关闭功能。</p>
|
||||
<p>(<code>SRS_BSW_00336</code>)</p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Comtype_NA_5]</span></p>
|
||||
<p>本条目引用的需求不适用,因为 <code>ComStack_Types</code> 不实现开发错误和生产错误。</p>
|
||||
<p>(<code>SRS_BSW_00337</code>、<code>SRS_BSW_00369</code>、<code>SRS_BSW_00339</code>、<code>SRS_BSW_00422</code>、<code>SRS_BSW_00417</code>、<code>SRS_BSW_00409</code>、<code>SRS_BSW_00385</code>、<code>SRS_BSW_00386</code>、<code>SRS_BSW_00327</code>、<code>SRS_BSW_00350</code>)</p>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>类型定义</strong>:<code>PduIdType</code>、<code>PduLengthType</code>、<code>PduInfoType</code>、<code>PNCHandleType</code>、<code>TPParameterType</code>、<code>BufReq_ReturnType</code>、<code>TpDataStateType</code>、<code>RetryInfoType</code>、<code>NetworkHandleType</code>、<code>IcomConfigIdType</code>、<code>IcomSwitch_ErrorType</code> 共 11 个类型定义全部翻译。</li>
|
||||
<li>✅ <strong>缩略语</strong>:I-PDU/L-PDU/N-PDU/PDU/SDU/OSEK-VDX/DCM/TP 等完整解释。</li>
|
||||
<li>✅ <strong>章节结构</strong>:原文 11 章,译文目录完整对应;8.1.1–8.1.11 全保留。</li>
|
||||
<li>✅ <strong>需求 ID 保留</strong>:<code>SWS_COMTYPE_00005</code>–<code>SWS_COMTYPE_00040</code>、<code>SWS_Comtype_NA_0</code>–<code>SWS_Comtype_NA_5</code>、<code>SWS_Comtype_00004/00006/00007/00010/00014/00015/00017/00030</code> 完整保留。</li>
|
||||
<li>✅ <strong>枚举取值</strong>:<code>BUFREQ_OK</code>、<code>BUFREQ_E_NOT_OK</code>、<code>BUFREQ_E_BUSY</code>、<code>BUFREQ_E_OVFL</code>、<code>TP_DATACONF</code>、<code>TP_DATARETRY</code>、<code>TP_CONFPENDING</code>、<code>TP_STMIN/BS/BC</code>、<code>ICOM_SWITCH_E_OK/FAILED</code> 等完整翻译并保留取值说明。</li>
|
||||
<li>✅ <strong>配置生成</strong>:<code>ComStack_Cfg.h</code> 与 <code>ComStackTypes.h</code> 区别已说明。</li>
|
||||
<li>✅ <strong>需求追溯</strong>:所有 SRS 追溯条目按 6 个 NA_* 类别归纳整理。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_SWS_CommunicationStackTypes.pdf(26 页)· 文档 ID 050
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,922 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>编译器抽象规范 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>编译器抽象规范(Specification of Compiler Abstraction)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:051</span>
|
||||
<span>🏷 类型:SWS(软件规范)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:53</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_SWS_CompilerAbstraction.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与功能概述</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a>
|
||||
<ul>
|
||||
<li><a href="#s3_1">3.1 输入文档</a></li>
|
||||
<li><a href="#s3_2">3.2 相关规范</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s4">4 约束与假设</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 限制</a></li>
|
||||
<li><a href="#s4_2">4.2 对汽车领域的适用性</a></li>
|
||||
<li><a href="#s4_3">4.3 对功能安全相关环境的适用性</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 对其他模块的依赖</a>
|
||||
<ul><li><a href="#s5_1">5.1 文件结构</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 需求追溯</a></li>
|
||||
<li><a href="#s7">7 功能规范</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1">7.1 一般行为</a>
|
||||
<ul>
|
||||
<li><a href="#s7_1_1">7.1.1 编译器符号清单</a></li>
|
||||
<li><a href="#s7_1_2">7.1.2 对使用编译器抽象的实现的要求</a></li>
|
||||
<li><a href="#s7_1_3">7.1.3 Compiler.h 的内容</a></li>
|
||||
<li><a href="#s7_1_4">7.1.4 Compiler_Cfg.h 的内容</a></li>
|
||||
<li><a href="#s7_1_5">7.1.5 综合示例</a></li>
|
||||
<li><a href="#s7_1_6">7.1.6 建议流程</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8">8 API 规范(宏定义)</a>
|
||||
<ul>
|
||||
<li><a href="#s8_2_1">8.2.1 通用定义(AUTOMATIC、TYPEDEF、NULL_PTR、INLINE、LOCAL_INLINE)</a></li>
|
||||
<li><a href="#s8_2_2">8.2.2 函数定义(FUNC、FUNC_P2CONST、FUNC_P2VAR)</a></li>
|
||||
<li><a href="#s8_2_3">8.2.3 指针定义(P2VAR、P2CONST、CONSTP2VAR、CONSTP2CONST、P2FUNC、CONSTP2FUNC)</a></li>
|
||||
<li><a href="#s8_2_4">8.2.4 常量定义(CONST)</a></li>
|
||||
<li><a href="#s8_2_5">8.2.5 变量定义(VAR)</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s9">9 时序图</a></li>
|
||||
<li><a href="#s10">10 配置规范</a></li>
|
||||
<li><a href="#s11">11 不适用的需求</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与功能概述(Introduction and functional overview)</h2>
|
||||
<p>本文档规范了用于抽象编译器特定关键字的宏,这些关键字用于声明和定义中的数据和代码寻址。</p>
|
||||
<p>主要是针对 16 位平台(例如 Cosmic 和 Metrowerks for S12X、Tasking for ST10)的编译器使用特殊关键字来处理微控制器架构的特性,原因在于 16 位地址范围的限制。如果不将内存模型调整为 <code>large</code> 或 <code>huge</code>,编译器的分页(paging)和扩展寻址(用于访问 64K 边界以外的内存)等特性<strong>不会被自动启用</strong>。数据和代码的位置必须通过特殊关键字显式选择。如果直接在源代码中使用这些关键字,将导致每次移植到新的微控制器系列时都必须修改软件,违反了源代码的平台无关性要求。</p>
|
||||
<p>如果默认将内存模型切换为 <code>large</code> 或 <code>huge</code>(以规避上述问题),则项目将承受增加的代码大小。</p>
|
||||
<p>本文档规范了一个<strong>三步概念</strong>:</p>
|
||||
<ol>
|
||||
<li>文件 <code>Compiler.h</code> 提供用于封装定义和声明的宏。</li>
|
||||
<li>每个单独的模块必须至少区分以下不同的内存类和指针类。每个类由一个 <code>#define</code> 表示。</li>
|
||||
<li>文件 <code>Compiler_Cfg.h</code> 允许根据模块描述和构建场景的内存设置,使用适当的编译器特定关键字来配置这些 <code>#define</code>。</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
<p>仅在本文件局部使用、因而未收录到 AUTOSAR 术语表中的缩略语与术语,必须在本节"局部术语表"中列出。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Large, huge</td><td>微控制器编译器的内存模型配置。默认情况下,所有访问机制使用扩展/分页寻址。<br>某些编译器使用 <code>huge</code> 一词代替 <code>far</code>。</td></tr>
|
||||
<tr><td>Tiny, small</td><td>微控制器编译器的内存模型配置。默认情况下,所有访问机制使用普通寻址。仅可访问平台架构地址范围内的数据和代码(例如 16 位架构上为 64K)。</td></tr>
|
||||
<tr><td>far</td><td>扩展/分页寻址方案的编译器关键字(用于可能位于平台架构普通寻址方案之外的数据和代码)。</td></tr>
|
||||
<tr><td>near</td><td>普通寻址方案的编译器关键字(用于位于平台架构地址范围内的数据和代码)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 输入文档</h3>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList.pdf</code></td></tr>
|
||||
<tr><td>[2]</td><td>General Requirements on Basic Software Modules</td><td><code>AUTOSAR_SRS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[3]</td><td>Layered Software Architecture</td><td><code>AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf</code></td></tr>
|
||||
<tr><td>[4]</td><td>Specification of ECU Configuration</td><td><code>AUTOSAR_TPS_ECUConfiguration.pdf</code></td></tr>
|
||||
<tr><td>[5]</td><td>Cosmic C Cross Compiler User's Guide for Motorola MC68HC12, V4.5</td><td>—</td></tr>
|
||||
<tr><td>[6]</td><td>ARM ADS compiler manual</td><td>—</td></tr>
|
||||
<tr><td>[7]</td><td>GreenHills MULTI for V850 V4.0.5</td><td>—</td></tr>
|
||||
<tr><td>[8]</td><td>TASKING for ST10 V8.5</td><td>—</td></tr>
|
||||
<tr><td>[9]</td><td>Wind River (Diab Data) for PowerPC Version 5.2.1</td><td>—</td></tr>
|
||||
<tr><td>[10]</td><td>TASKING for TriCore TC1796 V2.0R1</td><td>—</td></tr>
|
||||
<tr><td>[11]</td><td>Metrowerks CodeWarrior 4.0 for Freescale HC9S12X/XGATE (V5.0.25)</td><td>—</td></tr>
|
||||
<tr><td>[12]</td><td>General Specification of Basic Software Modules</td><td><code>AUTOSAR_SWS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[13]</td><td>Specification of Memory Mapping</td><td><code>AUTOSAR_SWS_MemoryMapping.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s3_2">3.2 相关规范</h3>
|
||||
<p>AUTOSAR 提供了通用基础软件模块规范 [12](SWS BSW General),该规范对编译器抽象同样适用。</p>
|
||||
<p>因此,<strong>SWS BSW General 应被视为编译器抽象的附加且必需的规范</strong>。</p>
|
||||
|
||||
<h2 id="s4">4 约束与假设(Constraints and assumptions)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 限制(Limitations)</h3>
|
||||
<p>在对抽象进行规范和概念验证时,已考虑了 3.1 节中列出的编译器。若任何其他编译器需要的关键字<strong>无法映射</strong>到本规范描述的机制,则该编译器<strong>将不被 AUTOSAR 支持</strong>。在这种情况下,编译器厂商<strong>必须</strong>调整其编译器。</p>
|
||||
<p>如果物理存在的内存在代码空间或数据空间上大于逻辑可寻址内存,且使用了超过逻辑可寻址空间的部分,则逻辑地址必须被重用。C 语言(以及其他语言)<strong>无法</strong>处理这种情况。</p>
|
||||
|
||||
<h3 id="s4_2">4.2 对汽车领域的适用性(Applicability to car domains)</h3>
|
||||
<p>无限制。</p>
|
||||
|
||||
<h3 id="s4_3">4.3 对功能安全相关环境的适用性(Applicability to safety related environments)</h3>
|
||||
<p>无限制。编译器抽象文件<strong>不实现任何功能</strong>,仅包含符号和宏。</p>
|
||||
|
||||
<h2 id="s5">5 对其他模块的依赖(Dependencies to other modules)</h2>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00048]</span></p>
|
||||
<p>SWS 编译器抽象适用于每个 AUTOSAR 基础软件模块和应用软件组件。因此,内存类(memclass)和指针类(ptrclass)宏参数的实现(见 <code>SWS_COMPILER_00040</code>)<strong>应当</strong>满足特定构建场景中每个软件模块的实现和配置需求。</p>
|
||||
<p><em>参考:SRS_BSW_00328, SRS_BSW_00384</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s5_1">5.1 文件结构(File structure)</h3>
|
||||
|
||||
<blockquote>
|
||||
<strong>图 1:Compiler.h 的包含结构</strong>
|
||||
<pre>
|
||||
«header» «header»
|
||||
Compiler.h ← Std_Types.h
|
||||
«includes»
|
||||
«includes»
|
||||
«header»
|
||||
Compiler_Cfg.h
|
||||
</pre>
|
||||
</blockquote>
|
||||
|
||||
<p>以下说明描述了与其他间接链接模块的连接:</p>
|
||||
<ul>
|
||||
<li><strong>注 1</strong>:编译器抽象用于配置元素(指针、变量、函数等)的<strong>可寻址性</strong>。</li>
|
||||
<li><strong>注 2</strong>:内存映射用于执行内存的<strong>分段</strong>。用户可以为优化源代码而定义段。</li>
|
||||
<li><strong>注 3</strong>:链接器设置负责将元素<strong>分类</strong>到相应的内存段。</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="s6">6 需求追溯(Requirements traceability)</h2>
|
||||
<p>本规范中实际有效的 SRS 需求追溯如下:</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>SRS 需求</th><th>由以下满足</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>SRS_BSW_00003</code>:所有软件模块<strong>应当</strong>提供版本和标识信息</td><td><code>SWS_COMPILER_00001</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00004</code>:所有基础软件模块<strong>应当</strong>对所包含的头文件版本进行预处理检查</td><td><code>SWS_COMPILER_00999</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00006</code>:MCAL 之上模块的源代码不应是处理器/编译器相关的</td><td><code>SWS_COMPILER_00010</code>、<code>SWS_COMPILER_00035</code>、<code>SWS_COMPILER_00036</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00306</code>:AUTOSAR 基础软件模块应是<strong>编译器/平台无关</strong>的</td><td><code>SWS_COMPILER_00010</code>、<code>SWS_COMPILER_00035</code>、<code>SWS_COMPILER_00036</code>、<code>SWS_COMPILER_00058</code>、<code>SWS_COMPILER_00062</code>、<code>SWS_COMPILER_00064</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00328</code>:所有 AUTOSAR 基础软件模块<strong>应当</strong>避免代码重复</td><td><code>SWS_COMPILER_00048</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00347</code>:不同实例的 BSW 驱动命名应分离</td><td><code>SWS_COMPILER_00050</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00348</code>:AUTOSAR 标准类型应放在标准类型头文件中</td><td><code>SWS_COMPILER_00003</code>、<code>SWS_COMPILER_00004</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00361</code>:所有非标准化关键字的映射应放在编译器特定类型和关键字头文件中</td><td><code>SWS_COMPILER_00003</code>、<code>SWS_COMPILER_00004</code>、<code>SWS_COMPILER_00040</code>、<code>SWS_COMPILER_00041</code>、<code>SWS_COMPILER_00046</code>、<code>SWS_COMPILER_00047</code>、<code>SWS_COMPILER_00053</code>、<code>SWS_COMPILER_00054</code>、<code>SWS_COMPILER_00055</code>、<code>SWS_COMPILER_00057</code>、<code>SWS_COMPILER_00059</code>、<code>SWS_COMPILER_00060</code>、<code>SWS_COMPILER_00061</code>、<code>SWS_COMPILER_00062</code>、<code>SWS_COMPILER_00063</code>、<code>SWS_COMPILER_00064</code>、<code>SWS_COMPILER_00065</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00374</code>:基础软件模块应提供可读的模块厂商标识</td><td><code>SWS_COMPILER_00030</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00384</code>:BSW 模块和 SWC 应在类型定义中不重复信息</td><td><code>SWS_COMPILER_00048</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00388</code>:容器用于分组为同一对象定义的配置参数</td><td><code>SWS_COMPILER_00040</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00404</code>:BSW 模块应支持构建后配置</td><td><code>SWS_COMPILER_00059</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00456</code>:应定义头文件以协调 BSW 模块</td><td><code>SWS_COMPILER_00054</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00464</code>:文件名应区分大小写</td><td><code>SWS_COMPILER_00004</code>、<code>SWS_COMPILER_00055</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00480</code>:空指针错误应遵循命名规则</td><td><code>SWS_COMPILER_00051</code></td></tr>
|
||||
<tr><td>其余 ~90+ SRS 需求</td><td><code>SWS_COMPILER_00999</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s7">7 功能规范(Functional specification)</h2>
|
||||
|
||||
<h3 id="s7_1">7.1 一般行为(General behavior)</h3>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00003]</span></p>
|
||||
<p>对于每个编译器和平台<strong>应当</strong>提供一个编译器抽象。</p>
|
||||
<p><em>参考:SRS_BSW_00348, SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s7_1_1">7.1.1 编译器符号清单(List of Compiler symbols)</h4>
|
||||
<p>下表根据 <code>SWS_COMPILER_00010</code> 定义了目标编译器符号。此表<strong>仅包含示例</strong>,并未列出 AUTOSAR 支持的所有可能编译器!</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>平台</th><th>编译器</th><th>编译器符号</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>S12X</td><td>Code Warrior</td><td><code>_CODEWARRIOR_C_S12X_</code></td></tr>
|
||||
<tr><td>S12X</td><td>Cosmic</td><td><code>_COSMIC_C_S12X_</code></td></tr>
|
||||
<tr><td>TC1796/TC1766</td><td>Tasking</td><td><code>_TASKING_C_TRICORE_</code></td></tr>
|
||||
<tr><td>ST10</td><td>Tasking</td><td><code>_TASKING_C_ST10_</code></td></tr>
|
||||
<tr><td>ST30</td><td>ARM Developer Suite</td><td><code>_ADS_C_ST30_</code></td></tr>
|
||||
<tr><td>V850</td><td>Greenhills</td><td><code>_GREENHILLS_C_V850_</code></td></tr>
|
||||
<tr><td>MPC5554</td><td>Diab Data</td><td><code>_DIABDATA_C_ESYS_</code></td></tr>
|
||||
<tr><td>TMS470</td><td>Texas Instruments</td><td><code>_TEXAS_INSTRUMENTS_C_TMS470_</code></td></tr>
|
||||
<tr><td>ARM</td><td>Texas Instruments</td><td><code>_TEXAS_INSTRUMENTS_C_ARM_</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p><strong>注意</strong>:为避免不兼容和/或不一致,编译器符号定义<strong>不得</strong>在符号后包含任何值。</p>
|
||||
|
||||
<h4 id="s7_1_2">7.1.2 对使用编译器抽象的实现的要求(Requirements on implementations using compiler abstraction)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00040]</span></p>
|
||||
<p>每个 AUTOSAR 软件模块和应用软件组件<strong>应当</strong>支持至少以下不同的内存类和指针类的区分。</p>
|
||||
<p><em>参考:SRS_BSW_00361, SRS_BSW_00388</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong><code><PREFIX></code> 的组成</strong>:</p>
|
||||
<ul>
|
||||
<li>对于 BSW 模块:按 <code><snp>[_<vi>_<ai>]</code> 构成,其中:
|
||||
<ul>
|
||||
<li><code><snp></code> 是<strong>段名前缀(Section Name Prefix)</strong>:
|
||||
<ul>
|
||||
<li>若 BSW 模块描述或软件组件描述中的 <code>MemorySection</code> 未定义 <code>SectionNamePrefix</code>,则 <code><snp></code> 应为 <code>BswModuleDescription</code> 的 <code>shortName</code> 转换为大写字母。</li>
|
||||
<li>若定义了 <code>SectionNamePrefix</code>,则 <code><snp></code> 应为与 <code>MemorySection</code> 关联的 <code>SectionNamePrefix</code> 的符号。</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code><vi></code> 是 BSW 模块的 <code>vendorId</code>。</li>
|
||||
<li><code><ai></code> 是 BSW 模块的 <code>vendorApiInfix</code>。</li>
|
||||
</ul>
|
||||
<p>方括号中的子部分 <code>[_<vi>_<ai>]</code> 在 BSW 模块未定义 <code>vendorApiInfix</code>(即不使用多实例化)时省略。</p>
|
||||
</li>
|
||||
<li>对于软件组件:<code><PREFIX></code> 是软件组件类型的 <code>shortName</code>(大小写敏感)。</li>
|
||||
</ul>
|
||||
|
||||
<p><strong><code><INIT_POLICY></code>(变量的初始化策略)</strong>的取值包括:</p>
|
||||
<ul>
|
||||
<li><code>NO_INIT</code>:用于从不清除且从不初始化的变量;</li>
|
||||
<li><code>CLEARED</code>:用于在每次复位后清零的变量;</li>
|
||||
<li><code>POWER_ON_CLEARED</code>:用于仅在上电复位后清零的变量;</li>
|
||||
<li><code>INIT</code>:用于在每次复位后用值初始化的变量;</li>
|
||||
<li><code>POWER_ON_INIT</code>:用于仅在上电复位后用值初始化的变量。</li>
|
||||
</ul>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>内存类型</th><th>memclass 与 ptrclass 宏参数语法</th><th>说明</th><th>所在文件</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>代码</td><td><code><PREFIX>_CODE[_<PERIOD>]</code></td><td>用于代码。<code>PERIOD</code> 为可执行实体的典型周期时间值和单位,<code>[_<PERIOD>]</code> 部分可选;单位包括 US(微秒)、MS(毫秒)、S(秒)。示例:100US、400US、1MS、5MS、10MS、20MS、100MS、1S。需注意实际周期可能因集成决策偏离典型值。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>代码</td><td><code><PREFIX>_<CN>_CODE</code></td><td>用于回调(callout)代码,其中 <code><CN></code> 是回调名称(含模块引用)的大写形式。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>代码</td><td><code><PREFIX>_CODE_FAST</code></td><td>用于进入快速代码内存段的代码。适用于无固定周期、但访问频繁或执行时间高的场景(例如频繁通知的回调)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>代码</td><td><code><PREFIX>_CODE_SLOW</code></td><td>用于进入慢速代码内存段的代码。适用于无固定周期、且访问频率低的场景(例如罕见错误的回调)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>常量</td><td><code><PREFIX>_CONST</code></td><td>用于全局或静态常量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>常量</td><td><code><PREFIX>_CALIB</code></td><td>用于标定常量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>常量</td><td><code><PREFIX>_CONFIG_DATA</code></td><td>用于模块配置常量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>常量</td><td><code><PREFIX>_CONST_SAVED_RECOVERY_ZONE<X></code></td><td>用于保存在非易失性存储器中的变量的 ROM 缓冲区,<code>X</code> 替换为字节数(如 8/16/32)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>指针</td><td><code><PREFIX>_APPL_DATA</code></td><td>用于通过 API 传递的应用数据引用(可能在 RAM 或 ROM 中)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>指针</td><td><code><PREFIX>_APPL_CONST</code></td><td>用于通过 API 传递的应用常量引用(应在 ROM 中,例如 Init 函数的指针)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>指针</td><td><code>REGSPACE</code></td><td>用于寄存器指针(如 <code>CONSTP2VAR(uint16, PWM_CONST, REGSPACE)</code>)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code><PREFIX>_VAR_<INIT_POLICY></code></td><td>用于所有全局或静态变量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code><PREFIX>_VAR_FAST_<INIT_POLICY></code></td><td>用于满足以下属性之一的所有全局或静态变量:按位访问、频繁使用、源代码中访问次数多。某些平台允许对该 RAM 区域中的变量使用位操作指令和较短的寻址指令。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code><PREFIX>_VAR_SLOW_<INIT_POLICY></code></td><td>用于访问频率低的所有全局或静态变量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code><PREFIX>_INTERNAL_VAR_<INIT_POLICY></code></td><td>用于可被标定工具访问的全局或静态变量。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code><PREFIX>_VAR_SAVED_ZONE<X></code></td><td>用于保存在非易失性存储器中的变量的 RAM 缓冲区,<code>X</code> 替换为字节数(如 8/16/32)。</td><td><code>Compiler_Cfg.h</code></td></tr>
|
||||
<tr><td>变量</td><td><code>AUTOMATIC</code></td><td>用于局部非静态变量。</td><td><code>Compiler.h</code></td></tr>
|
||||
<tr><td>类型</td><td><code>TYPEDEF</code></td><td>用于无法指定内存限定符的类型定义中。</td><td><code>Compiler.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>对于形式为 <code><PREFIX>_<NAME></code> 的内存类,<code><NAME></code> 部分可在 BSW 模块描述或软件组件描述的 <code>MemorySections</code> 中指定。这对生成代码尤其重要:</p>
|
||||
<ul>
|
||||
<li>若 <code>MemorySection</code> 未定义 <code>memClassSymbol</code> 属性,则 <code><NAME></code> 为所引用 <code>SwAddrMethod</code> 的 <code>shortName</code>(大小写敏感)。</li>
|
||||
<li>仅对 BSW:若定义了 <code>memClassSymbol</code> 属性,则 <code><NAME></code> 为 <code>MemorySection</code> 的 <code>memClassSymbol</code>(大小写敏感)。</li>
|
||||
</ul>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00041]</span></p>
|
||||
<p>每个 AUTOSAR 软件模块和应用软件组件<strong>应当</strong>使用以下关键字宏包装代码、变量、常量和指针类型的声明与定义。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例</strong>:</p>
|
||||
|
||||
<p>原生 C API:</p>
|
||||
<pre><code>Std_ReturnType Spi_SetupBuffers
|
||||
(
|
||||
Spi_ChannelType Channel,
|
||||
const Spi_DataType *SrcDataBufferPtr,
|
||||
Spi_DataType *DesDataBufferPtr,
|
||||
Spi_NumberOfDataType Length
|
||||
);</code></pre>
|
||||
|
||||
<p>封装后:</p>
|
||||
<pre><code>FUNC(Std_ReturnType, SPI_CODE) Spi_SetupBuffers
|
||||
(
|
||||
Spi_ChannelType Channel,
|
||||
P2CONST(Spi_DataType, AUTOMATIC, SPI_APPL_DATA) SrcDataBufferPtr,
|
||||
P2VAR(Spi_DataType, AUTOMATIC, SPI_APPL_DATA,) DesDataBufferPtr,
|
||||
Spi_NumberOfDataType Length
|
||||
);</code></pre>
|
||||
|
||||
<h4 id="s7_1_3">7.1.3 Compiler.h 的内容(Contents of Compiler.h)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00004]</span></p>
|
||||
<p>编译器抽象的文件名<strong>应当</strong>为 <code>Compiler.h</code>。</p>
|
||||
<p><em>参考:SRS_BSW_00348, SRS_BSW_00361, SRS_BSW_00464</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00053]</span></p>
|
||||
<p>文件 <code>Compiler.h</code> <strong>应当</strong>包含 7.1.5 节中规范的定义和宏。这些定义和宏对于一个特定的编译器和平台是固定的。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00005]</span></p>
|
||||
<p>若编译器不要求或不支持特殊关键字的使用,则本规范规定的相应宏<strong>应当</strong>以空定义或无效果的形式提供。</p>
|
||||
<p><strong>示例</strong>:</p>
|
||||
<pre><code>#define FUNC(type, memclass) type
|
||||
/* DIABDATA 不需要 */</code></pre>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00010]</span></p>
|
||||
<p>编译器抽象<strong>应当</strong>根据以下命名约定为<strong>目标编译器</strong>定义一个符号:<br><code>_<COMPILERNAME>_C_<PLATFORMNAME>_</code></p>
|
||||
<p><strong>注意 1</strong>:为避免不兼容和/或不一致,编译器符号定义<strong>不得</strong>在符号后包含任何值。</p>
|
||||
<p><strong>注意 2</strong>:这些定义可用于在不同编译器实现间切换,例如:</p>
|
||||
<ul>
|
||||
<li>驱动中的内联汇编片段;</li>
|
||||
<li>用于内存对齐控制的特殊 pragma;</li>
|
||||
<li>函数调用的本地化;</li>
|
||||
<li>对内存模型的适配。</li>
|
||||
</ul>
|
||||
<p><em>参考:SRS_BSW_00306, SRS_BSW_00006</em></p>
|
||||
</div>
|
||||
|
||||
<p>符号清单见 7.1.1 节。</p>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00030]</span></p>
|
||||
<p><code>Compiler.h</code> <strong>应当</strong>提供支持的编译器厂商和适用编译器版本的信息。</p>
|
||||
<p><em>参考:SRS_BSW_00374</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00035]</span></p>
|
||||
<p>宏参数 <code>memclass</code> 和 <code>ptrclass</code> <strong>不得</strong>填充编译器特定的关键字,而<strong>应当</strong>填充 <code>SWS_COMPILER_00040</code> 中配置的值之一。</p>
|
||||
<p><em>参考:SRS_BSW_00306, SRS_BSW_00006</em></p>
|
||||
</div>
|
||||
|
||||
<p>其原理是:更改变量、指针或函数的存储类时,模块的实现<strong>不应</strong>受到影响。</p>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00036]</span></p>
|
||||
<p>C 语言<strong>禁止</strong>在函数局部变量(auto 变量)上使用 <code>far/near</code> 关键字。因此,当使用下述宏在栈上分配指针时,<code>memclass</code> 参数<strong>应当</strong>设置为 <code>AUTOMATIC</code>。</p>
|
||||
<p><em>参考:SRS_BSW_00306, SRS_BSW_00006</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00047]</span></p>
|
||||
<p><code>Compiler.h</code> 头文件<strong>应当</strong>防止被多次包含。</p>
|
||||
<p><strong>示例</strong>:</p>
|
||||
<pre><code>#ifndef COMPILER_H
|
||||
#define COMPILER_H
|
||||
/* Compiler.h 的实现 */
|
||||
...
|
||||
#endif /* COMPILER_H */</code></pre>
|
||||
<p>在 <code>#ifndef - #endif</code> 之外只能有注释。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00050]</span></p>
|
||||
<p>允许使用厂商特定的扩展来扩展编译器抽象头文件。厂商扩展的元素<strong>应当</strong>在名称中包含 AUTOSAR Vendor ID。</p>
|
||||
<p><em>参考:SRS_BSW_00347</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s7_1_4">7.1.4 Compiler_Cfg.h 的内容(Contents of Compiler_Cfg.h)</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00055]</span></p>
|
||||
<p>文件 <code>Compiler_Cfg.h</code> <strong>应当</strong>包含传递给 <code>Compiler.h</code> 中定义的宏的模块/组件特定参数(<code>ptrclass</code> 和 <code>memclass</code>)。见 <code>SWS_COMPILER_00040</code> 中关于内存类型和所需语法的说明。</p>
|
||||
<p><em>参考:SRS_BSW_00361, SRS_BSW_00464</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00054]</span></p>
|
||||
<p>模块特定扩展元素<strong>应当</strong>在名称中包含 BSW 模块的<strong>模块缩写</strong>。应用软件组件特定扩展元素<strong>应当</strong>包含软件组件类型的<strong>名称</strong>。</p>
|
||||
<p><em>参考:SRS_BSW_00456</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s7_1_5">7.1.5 综合示例(Comprehensive example)</h4>
|
||||
<p>本示例展示了一个 API 函数中宏的定义、使用和配置位置。</p>
|
||||
|
||||
<ul>
|
||||
<li>模块:<code>Eep</code></li>
|
||||
<li>API 函数:<code>Eep_Read</code></li>
|
||||
<li>平台:S12X</li>
|
||||
<li>编译器:Cosmic</li>
|
||||
</ul>
|
||||
|
||||
<p><strong>文件 <code>Eep.c</code>:</strong></p>
|
||||
|
||||
<pre><code>#include "Std_Types.h" /* 该文件已包含 Compiler.h */
|
||||
|
||||
FUNC(Std_ReturnType, EEP_CODE) Eep_Read
|
||||
(
|
||||
Eep_AddressType EepromAddress,
|
||||
P2VAR(uint8, AUTOMATIC, EEP_APPL_DATA) DataBufferPtr,
|
||||
Eep_LengthType Length
|
||||
)</code></pre>
|
||||
|
||||
<p><strong>文件 <code>Compiler.h</code>:</strong></p>
|
||||
|
||||
<pre><code>#include "Compiler_Cfg.h"
|
||||
|
||||
#define AUTOMATIC
|
||||
#define FUNC(rettype, memclass) rettype memclass
|
||||
#define P2VAR(ptrtype, memclass, ptrclass) ptrclass ptrtype * memclass</code></pre>
|
||||
|
||||
<p><strong>文件 <code>Compiler_Cfg.h</code>:</strong></p>
|
||||
|
||||
<pre><code>#define EEP_CODE
|
||||
#define EEP_APPL_DATA @far /* NvM 的 RAM 块位于 banked RAM */</code></pre>
|
||||
|
||||
<p><strong>依赖关系是什么?</strong></p>
|
||||
<p><code>EEP_APPL_DATA</code> 被定义为 <code>far</code>。这意味着指向由 NVRAM Manager 管理的 RAM 块的指针也<strong>必须</strong>定义为 <code>far</code>。应用程序可以将 RAM 镜像放在 banked RAM 或非 banked RAM 中。RAM 块到 banked RAM 的映射在 <code><Mip>_MemMap.h</code> 中完成(关于 <code><Mip></code> 的更多信息见 [12])。</p>
|
||||
<p>由于这些指针也通过 Memory Interface 和 EEPROM Abstraction 传递,因此它们的指针类和内存类<strong>必须</strong>也匹配 <code>EEP_APPL_DATA</code>。</p>
|
||||
|
||||
<p><strong>在 32 位平台上会有什么不同?</strong></p>
|
||||
<p>尽管只有 S12X 内部有 EEPROM,但从编译器抽象的角度看,唯一变化的是 <code>Compiler_Cfg.h</code> 中的定义。它们将变为空定义:</p>
|
||||
|
||||
<pre><code>#define EEP_CODE
|
||||
#define EEP_APPL_DATA</code></pre>
|
||||
|
||||
<h4 id="s7_1_6">7.1.6 建议流程(Proposed process)</h4>
|
||||
<p>为支持多供应商环境下的开发和集成,特定的交付流程不可或缺。以下描述可视为建议:</p>
|
||||
|
||||
<blockquote>
|
||||
<strong>图 2:建议的集成流程</strong><br>
|
||||
<strong>步骤 1:基础文件交付</strong><br>
|
||||
<strong>AUTOSAR 模块供应商</strong>:实现源文件和文档、分配版本号和厂商号、实现 <code>Compiler_Cfg.h</code> 和 <code><Mip>_MemMap.h</code> 的模块特定部分、构建包;交付 <code>Compiler.h</code>、<code>Std_Types.h</code>、<code>Platform_Types.h</code>。<br>
|
||||
<strong>AUTOSAR 集成商</strong>:接收并检查包、集成模块、将各模块的 <code>Compiler_Cfg.h</code> 集成到主 <code>Compiler_Cfg.h</code> 中、配置 <code><Mip>_MemMap.h</code> 和 <code>Compiler_Cfg.h</code>。<br>
|
||||
<strong>步骤 2:模块/组件交付</strong><br>
|
||||
模块 A/B/C 的 <code>Compiler_Cfg.h</code> 与源代码一起打包交付,由集成环境统一集成。
|
||||
</blockquote>
|
||||
|
||||
<h2 id="s8">8 API 规范(API specification)</h2>
|
||||
<p>本节是本模块唯一适用的 API。</p>
|
||||
|
||||
<h3 id="s8_2_1">8.2.1 通用定义(General definitions)</h3>
|
||||
|
||||
<h4>8.2.1.1 内存类 AUTOMATIC</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00046]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Define</th><td><code>AUTOMATIC</code></td></tr>
|
||||
<tr><th>取值范围</th><td>"empty"(空)</td></tr>
|
||||
<tr><th>说明</th><td>内存类 <code>AUTOMATIC</code> <strong>应当</strong>以空定义的形式提供,用于局部指针的声明。</td></tr>
|
||||
<tr><th>备注</th><td><code>SWS_COMPILER_00040</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.1.2 内存类 TYPEDEF</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00059]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Define</th><td><code>TYPEDEF</code></td></tr>
|
||||
<tr><th>取值范围</th><td>"empty"(空)</td></tr>
|
||||
<tr><th>说明</th><td>内存类 <code>TYPEDEF</code> <strong>应当</strong>以空定义形式提供。该内存类<strong>应当</strong>用于无法指定内存限定符的类型定义中。例如在用 <code>P2VAR</code> 等宏定义指针类型时,宏需要两个参数:第一个参数(指向的内存位置的距离)可在类型定义中指定;但第二个参数(指针自身的内存分配)此时无法定义。因此<strong>应当</strong>使用内存类 <code>TYPEDEF</code>。</td></tr>
|
||||
<tr><th>备注</th><td><code>SWS_COMPILER_00040</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00404</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.1.3 NULL_PTR</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00051]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Define</th><td><code>NULL_PTR</code></td></tr>
|
||||
<tr><th>取值范围</th><td>void 指针 <code>((void *)0)</code></td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>提供一个定义为指向零的 void 指针的 <code>NULL_PTR</code>。</td></tr>
|
||||
<tr><th>备注</th><td><code>SWS_COMPILER_00040</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00480</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.1.4 INLINE</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00057]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Define</th><td><code>INLINE</code></td></tr>
|
||||
<tr><th>取值范围</th><td><code>inline</code>/空</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>提供 <code>INLINE</code> 定义以抽象关键字 <code>inline</code>。</td></tr>
|
||||
<tr><th>备注</th><td><code>SWS_COMPILER_00040</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.1.5 LOCAL_INLINE</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00060]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>Define</th><td><code>LOCAL_INLINE</code></td></tr>
|
||||
<tr><th>取值范围</th><td><code>static inline</code>/空</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>提供 <code>LOCAL_INLINE</code> 定义,用于抽象具有 <code>static</code> 作用域的函数中的 <code>inline</code> 关键字。</td></tr>
|
||||
<tr><th>备注</th><td>不同编译器可能要求不同的 <code>static</code> 与 <code>inline</code> 关键字顺序(若支持)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_2_2">8.2.2 函数定义(Function definitions)</h3>
|
||||
|
||||
<h4 id="s8_2_2_1">8.2.2.1 FUNC 函数标识信息</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00001]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>FUNC</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define FUNC(rettype, memclass)</code></td></tr>
|
||||
<tr><th rowspan="2">输入参数</th><td><code>rettype</code> 函数的返回类型</td></tr>
|
||||
<tr><td><code>memclass</code> 函数自身的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>FUNC</code> 宏,用于函数的声明和定义,确保特定编译器所要求的正确语法。</td></tr>
|
||||
<tr><th>备注</th><td>—</td></tr>
|
||||
<tr><th>配置</th><td>—</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00003</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例(Cosmic, S12X)</strong>:</p>
|
||||
<pre><code>#define <PREFIX>_CODE @near
|
||||
#define FUNC(rettype, memclass) memclass rettype
|
||||
|
||||
/* 函数声明和定义所需用法: */
|
||||
FUNC(void, <PREFIX>_CODE) ExampleFunction (void);</code></pre>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00058]</span></p>
|
||||
<p>此宏的参数列表中<strong>不得</strong>嵌套其他编译器抽象宏。应改用先前定义的类型作为返回类型,或使用 <code>FUNC_P2CONST</code>/<code>FUNC_P2VAR</code>。</p>
|
||||
<p><em>参考:SRS_BSW_00306</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例</strong>:</p>
|
||||
<pre><code>typedef P2VAR(uint8, AUTOMATIC, <PREFIX>_VAR) NearDataType;
|
||||
FUNC(NearDataType, <PREFIX>_CODE)
|
||||
FarFuncReturnsNearPtr(void);</code></pre>
|
||||
|
||||
<h4>8.2.2.2 FUNC_P2CONST</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00061]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>FUNC_P2CONST</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define FUNC_P2CONST(rettype, ptrclass, memclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>rettype</code> 函数的返回类型</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><td><code>memclass</code> 函数自身的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>FUNC_P2CONST</code> 宏,用于声明和定义返回常量指针的函数。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00062]</span></p>
|
||||
<p><code>FUNC_P2CONST</code> 的参数列表中<strong>不得</strong>嵌套其他编译器抽象宏。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.2.3 FUNC_P2VAR</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00063]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>FUNC_P2VAR</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define FUNC_P2VAR(rettype, ptrclass, memclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>rettype</code> 函数的返回类型</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><td><code>memclass</code> 函数自身的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>FUNC_P2VAR</code> 宏,用于声明和定义返回变量指针的函数。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00064]</span></p>
|
||||
<p><code>FUNC_P2VAR</code> 宏的参数列表中<strong>不得</strong>嵌套其他编译器抽象宏。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_2_3">8.2.3 指针定义(Pointer definitions)</h3>
|
||||
|
||||
<h4>8.2.3.1 P2VAR</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00006]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>P2VAR</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define P2VAR(ptrtype, memclass, ptrclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>ptrtype</code> 被引用变量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 指针变量自身的分类</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>P2VAR</code> 宏,用于声明和定义指向变量的 RAM 中指针。<br>指针自身可修改(如 <code>ExamplePtr++</code>)。<br>指针的目标可修改(如 <code>*ExamplePtr = 5</code>)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例(Metrowerks, S12X)</strong>:</p>
|
||||
<pre><code>#define P2VAR(ptrtype, memclass, ptrclass) \
|
||||
ptrclass ptrtype * memclass
|
||||
|
||||
/* 指针声明和定义所需用法: */
|
||||
#define SPI_APPL_DATA @far
|
||||
#define SPI_VAR_FAST @near
|
||||
|
||||
P2VAR(uint8, SPI_VAR_FAST, SPI_APPL_DATA) Spi_FastPointerToApplData;</code></pre>
|
||||
|
||||
<h4>8.2.3.2 P2CONST</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00013]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>P2CONST</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define P2CONST(ptrtype, memclass, ptrclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>ptrtype</code> 被引用常量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 指针变量自身的分类</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>P2CONST</code> 宏,用于声明和定义指向常量的 RAM 中指针。<br>指针自身可修改(如 <code>ExamplePtr++</code>)。<br>指针的目标<strong>不可</strong>修改(只读)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例</strong>:</p>
|
||||
<pre><code>/* Metrowerks, S12X */
|
||||
#define P2CONST(ptrtype, memclass, ptrclass) \
|
||||
const ptrtype memclass * ptrclass
|
||||
|
||||
/* Cosmic, S12X */
|
||||
#define P2CONST(ptrtype, memclass, ptrclass) \
|
||||
const ptrtype ptrclass * memclass
|
||||
|
||||
/* Tasking, ST10 */
|
||||
#define P2CONST(ptrtype, memclass, ptrclass) \
|
||||
const ptrclass ptrtype * memclass
|
||||
|
||||
/* 指针声明和定义所需用法: */
|
||||
#define EEP_APPL_CONST @far
|
||||
#define EEP_VAR @near
|
||||
|
||||
P2CONST(Eep_ConfigType, EEP_VAR, EEP_APPL_CONST) Eep_ConfigurationPtr;</code></pre>
|
||||
|
||||
<h4>8.2.3.3 CONSTP2VAR</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00031]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>CONSTP2VAR</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define CONSTP2VAR (ptrtype, memclass, ptrclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>ptrtype</code> 被引用变量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 指针常量自身的分类</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>CONSTP2VAR</code> 宏,用于声明和定义访问变量的常量指针。<br>指针自身<strong>不可</strong>修改(固定地址)。<br>指针的目标可修改(如 <code>*ExamplePtr = 18</code>)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例(Tasking, ST10)</strong>:</p>
|
||||
<pre><code>#define CONSTP2VAR (ptrtype, memclass, ptrclass) \
|
||||
ptrclass ptrtype * const memclass
|
||||
|
||||
/* 所需用法: */
|
||||
/* 指向应用数据的常量指针 */
|
||||
CONSTP2VAR (uint8, NVM_VAR, NVM_APPL_DATA)
|
||||
NvM_PointerToRamMirror = Appl_RamMirror;</code></pre>
|
||||
|
||||
<h4>8.2.3.4 CONSTP2CONST</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00032]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>CONSTP2CONST</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define CONSTP2CONST(ptrtype, memclass, ptrclass)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>ptrtype</code> 被引用常量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 指针常量自身的分类</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>CONSTP2CONST</code> 宏,用于声明和定义访问常量的常量指针。<br>指针自身<strong>不可</strong>修改(固定地址)。<br>指针的目标<strong>不可</strong>修改(只读)。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.3.5 P2FUNC</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00039]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>P2FUNC</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define P2FUNC(rettype, ptrclass, fctname)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>rettype</code> 函数的返回类型</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><td><code>fctname</code> 函数名称(或定义类型的名称)</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>P2FUNC</code> 宏,用于函数指针的类型定义。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h4>8.2.3.6 CONSTP2FUNC</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00065]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>CONSTP2FUNC</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define CONSTP2FUNC(rettype, ptrclass, fctname)</code></td></tr>
|
||||
<tr><th rowspan="3">输入参数</th><td><code>rettype</code> 函数的返回类型</td></tr>
|
||||
<tr><td><code>ptrclass</code> 指针距离的分类</td></tr>
|
||||
<tr><td><code>fctname</code> 函数名称(或定义类型的名称)</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>CONSTP2FUNC</code> 宏,用于函数的<strong>常量指针</strong>的类型定义。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_2_4">8.2.4 常量定义(Constant definitions)</h3>
|
||||
|
||||
<h4>8.2.4.1 CONST</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00023]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>CONST</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define CONST(consttype, memclass)</code></td></tr>
|
||||
<tr><th rowspan="2">输入参数</th><td><code>consttype</code> 常量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 常量自身的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>CONST</code> 宏,用于常量的声明和定义。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00309</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例(Cosmic, S12X)</strong>:</p>
|
||||
<pre><code>#define CONST(type, memclass) memclass const type
|
||||
|
||||
/* 所需用法: */
|
||||
#define NVM_CONST @gpage
|
||||
|
||||
CONST(uint8, NVM_CONST) NvM_ConfigurationData;</code></pre>
|
||||
|
||||
<h3 id="s8_2_5">8.2.5 变量定义(Variable definitions)</h3>
|
||||
|
||||
<h4>8.2.5.1 VAR</h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00026]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>宏名</th><td><code>VAR</code></td></tr>
|
||||
<tr><th>语法</th><td><code>#define VAR(vartype, memclass)</code></td></tr>
|
||||
<tr><th rowspan="2">输入参数</th><td><code>vartype</code> 变量的类型</td></tr>
|
||||
<tr><td><code>memclass</code> 变量自身的分类</td></tr>
|
||||
<tr><th>输出参数</th><td>无</td></tr>
|
||||
<tr><th>返回值</th><td>无</td></tr>
|
||||
<tr><th>说明</th><td>编译器抽象<strong>应当</strong>定义 <code>VAR</code> 宏,用于变量的声明和定义。</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<p><strong>示例(Tasking, ST10)</strong>:</p>
|
||||
<pre><code>#define VAR(type, memclass) memclass type
|
||||
|
||||
/* 所需用法: */
|
||||
#define NVM_FAST_VAR _near
|
||||
|
||||
VAR(uint8, NVM_FAST_VAR) NvM_VeryFrequentlyUsedState;</code></pre>
|
||||
|
||||
<h3 id="s8_3">8.3 类型定义</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h3 id="s8_4">8.4 函数定义</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h3 id="s8_5">8.5 回调通知</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h3 id="s8_6">8.6 调度函数</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h3 id="s8_7">8.7 期望接口</h3>
|
||||
<p>不适用(8.7.1/8.7.2/8.7.3 均不适用)。</p>
|
||||
|
||||
<h3 id="s8_8">8.8 服务接口</h3>
|
||||
<p>不适用(8.8.1–8.8.5 均不适用)。</p>
|
||||
|
||||
<h2 id="s9">9 时序图(Sequence diagrams)</h2>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s10">10 配置规范(Configuration specification)</h2>
|
||||
<p>编译器抽象<strong>没有</strong>独立的配置接口(即没有单独的参数定义)。取而代之的是,内存映射(见 [13])的配置已扩展为本章中描述的参数。</p>
|
||||
|
||||
<h3 id="s10_1">10.1 如何阅读本章</h3>
|
||||
<p>强烈建议同时阅读以下文档:分层软件架构 [3]、ECU 配置规范 [4]。</p>
|
||||
|
||||
<h3 id="s10_2">10.2 容器与配置参数</h3>
|
||||
|
||||
<h4>10.2.1 模块特定内存类</h4>
|
||||
<p>也可以配置模块特定内存类。这通过容器 <code>MemMapAddressingModeSet</code> 及其包含的参数 <code>MemMapCompilerMemClassSymbolImpl</code> 完成。详见 [13]。</p>
|
||||
|
||||
<h4>10.2.2 全局内存类</h4>
|
||||
<p>也可以配置对所有模块有效的全局内存类。这通过容器 <code>MemMapGenericCompilerMemClass</code> 及其包含的参数 <code>MemMapGenericCompilerMemClassSymbolImpl</code> 完成。详见 [13]。</p>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00042]</span></p>
|
||||
<p>文件 <code>Compiler.h</code> 对于每个构建场景都是特定的。因此,<strong>没有</strong>标准化的配置接口。</p>
|
||||
<p><em>参考:SRS_BSW_00361</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s10_3">10.3 发布信息(Published Information)</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s11">11 不适用的需求(Not applicable requirements)</h2>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_COMPILER_00999]</span></p>
|
||||
<p>以下需求对本规范<strong>不适用</strong>:</p>
|
||||
<p><code>SRS_BSW_00300</code>、<code>SRS_BSW_00301</code>、<code>SRS_BSW_00302</code>、<code>SRS_BSW_00305</code>、<code>SRS_BSW_00307</code>、<code>SRS_BSW_00308</code>、<code>SRS_BSW_00309</code>、<code>SRS_BSW_00310</code>、<code>SRS_BSW_00312</code>、<code>SRS_BSW_00314</code>、<code>SRS_BSW_00323</code>、<code>SRS_BSW_00325</code>、<code>SRS_BSW_00327</code>、<code>SRS_BSW_00330</code>、<code>SRS_BSW_00331</code>、<code>SRS_BSW_00333</code>、<code>SRS_BSW_00334</code>、<code>SRS_BSW_00335</code>、<code>SRS_BSW_00336</code>、<code>SRS_BSW_00339</code>、<code>SRS_BSW_00341</code>、<code>SRS_BSW_00342</code>、<code>SRS_BSW_00343</code>、<code>SRS_BSW_00344</code>、<code>SRS_BSW_00346</code>、<code>SRS_BSW_00350</code>、<code>SRS_BSW_00353</code>、<code>SRS_BSW_00357</code>、<code>SRS_BSW_00358</code>、<code>SRS_BSW_00359</code>、<code>SRS_BSW_00360</code>、<code>SRS_BSW_00369</code>、<code>SRS_BSW_00371</code>、<code>SRS_BSW_00373</code>、<code>SRS_BSW_00375</code>、<code>SRS_BSW_00377</code>、<code>SRS_BSW_00378</code>、<code>SRS_BSW_00380</code>、<code>SRS_BSW_00385</code>、<code>SRS_BSW_00386</code>、<code>SRS_BSW_00390</code>、<code>SRS_BSW_00392</code>、<code>SRS_BSW_00393</code>、<code>SRS_BSW_00394</code>、<code>SRS_BSW_00395</code>、<code>SRS_BSW_00398</code>、<code>SRS_BSW_00399</code>、<code>SRS_BSW_00004</code>、<code>SRS_BSW_00400</code>、<code>SRS_BSW_00401</code>、<code>SRS_BSW_00404</code>、<code>SRS_BSW_00405</code>、<code>SRS_BSW_00406</code>、<code>SRS_BSW_00407</code>、<code>SRS_BSW_00408</code>、<code>SRS_BSW_00409</code>、<code>SRS_BSW_00410</code>、<code>SRS_BSW_00411</code>、<code>SRS_BSW_00413</code>、<code>SRS_BSW_00414</code>、<code>SRS_BSW_00415</code>、<code>SRS_BSW_00416</code>、<code>SRS_BSW_00417</code>、<code>SRS_BSW_00419</code>、<code>SRS_BSW_00422</code>、<code>SRS_BSW_00423</code>、<code>SRS_BSW_00424</code>、<code>SRS_BSW_00425</code>、<code>SRS_BSW_00426</code>、<code>SRS_BSW_00427</code>、<code>SRS_BSW_00428</code>、<code>SRS_BSW_00429</code>、<code>SRS_BSW_00432</code>、<code>SRS_BSW_00433</code>、<code>SRS_BSW_00005</code>、<code>SRS_BSW_00007</code>、<code>SRS_BSW_00009</code>、<code>SRS_BSW_00010</code>、<code>SRS_BSW_00158</code>、<code>SRS_BSW_00161</code>、<code>SRS_BSW_00162</code>、<code>SRS_BSW_00164</code>、<code>SRS_BSW_00167</code>、<code>SRS_BSW_00168</code>、<code>SRS_BSW_00170</code>、<code>SRS_BSW_00171</code>、<code>SRS_BSW_00172</code>、<code>SRS_BSW_00351</code>、<code>SRS_BSW_00383</code>、<code>SRS_BSW_00388</code>、<code>SRS_BSW_00389</code>、<code>SRS_BSW_00396</code>、<code>SRS_BSW_00403</code>、<code>SRS_BSW_00412</code>、<code>SRS_BSW_00448</code>、<code>SRS_BSW_00449</code>、<code>SRS_BSW_00452</code>、<code>SRS_BSW_00453</code>、<code>SRS_BSW_00454</code>、<code>SRS_BSW_00456</code>、<code>SRS_BSW_00457</code>、<code>SRS_BSW_00458</code>、<code>SRS_BSW_00459</code>、<code>SRS_BSW_00461</code>、<code>SRS_BSW_00462</code>、<code>SRS_BSW_00466</code>、<code>SRS_BSW_00469</code>、<code>SRS_BSW_00470</code>、<code>SRS_BSW_00471</code>、<code>SRS_BSW_00472</code>、<code>SRS_BSW_00473</code>、<code>SRS_BSW_00478</code>、<code>SRS_BSW_00479</code>、<code>SRS_BSW_00480</code>、<code>SRS_BSW_00481</code>、<code>SRS_BSW_00482</code>、<code>SRS_BSW_00483</code>。</p>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>宏定义</strong>:AUTOMATIC、TYPEDEF、NULL_PTR、INLINE、LOCAL_INLINE、FUNC、FUNC_P2CONST、FUNC_P2VAR、P2VAR、P2CONST、CONSTP2VAR、CONSTP2CONST、P2FUNC、CONSTP2FUNC、CONST、VAR 共 16 个宏全部翻译,参数/返回值/描述完整。</li>
|
||||
<li>✅ <strong>内存类清单</strong>:7.1.2 节 <code><PREFIX>_*</code> 系列(CODE/CONST/VAR/APPL_DATA/CONFIG_DATA 等)以及初始化策略(NO_INIT/CLEARED/POWER_ON_CLEARED/INIT/POWER_ON_INIT)完整翻译。</li>
|
||||
<li>✅ <strong>编译器符号清单</strong>:7.1.1 节列出 9 种编译器-平台组合符号(Cosmic/Metrowerks/Tasking/Greenhills/ADS/DIABDATA 等)。</li>
|
||||
<li>✅ <strong>章节结构</strong>:原文 11 章,译文完整对应;8.2.1–8.2.5 全部子节保留。</li>
|
||||
<li>✅ <strong>需求 ID 保留</strong>:<code>SWS_COMPILER_00001</code>–<code>SWS_COMPILER_00065</code>、<code>SWS_COMPILER_00999</code> 完整保留。</li>
|
||||
<li>✅ <strong>示例代码</strong>:Cosmic/Metrowerks/Tasking/CodeWarrior/PowerPC 各编译器示例保留原文。</li>
|
||||
<li>✅ <strong>包含结构图</strong>:5.1 节"Compiler.h 的包含结构"以 ASCII 重绘。</li>
|
||||
<li>✅ <strong>不适用 SRS</strong>:~100 条 SRS 通过 <code>SWS_COMPILER_00999</code> 集中列出。</li>
|
||||
<li>⚠ <strong>编译器分析表</strong>:8.2.2–8.2.3 节中各编译器(Cosmic/Metrowerks/IAR/Tasking/Greenhills/ADS/DIABDATA)的关键字差异表未完整逐项翻译,保留概要说明。完整对照可查阅原文 PDF。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_SWS_CompilerAbstraction.pdf(53 页)· 文档 ID 051
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,383 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>标准类型规范 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>标准类型规范(Specification of Standard Types)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:049</span>
|
||||
<span>🏷 类型:SWS(软件规范)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:22</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_SWS_StandardTypes.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍与功能概述</a></li>
|
||||
<li><a href="#s2">2 缩略语与术语</a></li>
|
||||
<li><a href="#s3">3 相关文档</a>
|
||||
<ul>
|
||||
<li><a href="#s3_1">3.1 输入文档</a></li>
|
||||
<li><a href="#s3_2">3.2 相关标准与规范</a></li>
|
||||
<li><a href="#s3_3">3.3 相关规范</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s4">4 约束与假设</a>
|
||||
<ul>
|
||||
<li><a href="#s4_1">4.1 限制</a></li>
|
||||
<li><a href="#s4_2">4.2 对汽车领域的适用性</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s5">5 软件架构</a>
|
||||
<ul>
|
||||
<li><a href="#s5_1">5.1 对其他模块的依赖</a></li>
|
||||
<li><a href="#s5_2">5.2 文件结构</a></li>
|
||||
<li><a href="#s5_2_1">5.2.1 通信相关 BSW 模块</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s6">6 需求追溯</a></li>
|
||||
<li><a href="#s7">7 功能规范</a>
|
||||
<ul><li><a href="#s7_1">7.1 通用问题</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s8">8 API 规范</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1">8.1 类型定义</a>
|
||||
<ul>
|
||||
<li><a href="#s8_1_1">8.1.1 <code>Std_ReturnType</code></a></li>
|
||||
<li><a href="#s8_1_2">8.1.2 <code>Std_VersionInfoType</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8_2">8.2 符号定义</a>
|
||||
<ul>
|
||||
<li><a href="#s8_2_1">8.2.1 <code>E_OK</code>、<code>E_NOT_OK</code></a></li>
|
||||
<li><a href="#s8_2_2">8.2.2 <code>STD_HIGH</code>、<code>STD_LOW</code></a></li>
|
||||
<li><a href="#s8_2_3">8.2.3 <code>STD_ACTIVE</code>、<code>STD_IDLE</code></a></li>
|
||||
<li><a href="#s8_2_4">8.2.4 <code>STD_ON</code>、<code>STD_OFF</code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s8_3">8.3 函数定义</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s9">9 时序图</a></li>
|
||||
<li><a href="#s10">10 配置规范</a></li>
|
||||
<li><a href="#s11">11 不适用的需求</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍与功能概述(Introduction and functional overview)</h2>
|
||||
<p>本规范定义了 AUTOSAR 标准类型头文件。它包含所有在多个基础软件模块中复用、且与平台和编译器无关的类型。</p>
|
||||
<p><strong>强烈推荐</strong>在 AUTOSAR 社区内统一使用该标准类型文件,以保证类型的唯一性,并避免从供应商 A 切换到供应商 B 时类型发生变化。</p>
|
||||
|
||||
<h2 id="s2">2 缩略语与术语(Acronyms and abbreviations)</h2>
|
||||
<p>仅在本文件局部使用、因而未收录到 AUTOSAR 术语表中的缩略语与术语,必须在本节"局部术语表"中列出。</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩略语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>API</td><td>Application Programming Interface(应用程序编程接口)</td></tr>
|
||||
<tr><td>OSEK/VDX</td><td>Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug(汽车电子开放系统及其接口)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>缩写</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>STD</td><td>Standard(标准)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 相关文档(Related documentation)</h2>
|
||||
|
||||
<h3 id="s3_1">3.1 输入文档</h3>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>文档名</th><th>原 PDF</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[1]</td><td>General Requirements on Basic Software Modules</td><td><code>AUTOSAR_SRS_BSWGeneral.pdf</code></td></tr>
|
||||
<tr><td>[2]</td><td>General Requirements on SPAL</td><td><code>AUTOSAR_SRS_SPALGeneral.pdf</code></td></tr>
|
||||
<tr><td>[3]</td><td>Specification of RTE Software</td><td><code>AUTOSAR_SWS_RTE.pdf</code></td></tr>
|
||||
<tr><td>[4]</td><td>Basic Software Module Description Template</td><td><code>AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf</code></td></tr>
|
||||
<tr><td>[5]</td><td>List of Basic Software Modules</td><td><code>AUTOSAR_TR_BSWModuleList</code></td></tr>
|
||||
<tr><td>[6]</td><td>General Specification of Basic Software Modules</td><td><code>AUTOSAR_SWS_BSWGeneral.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s3_2">3.2 相关标准与规范</h3>
|
||||
<table>
|
||||
<thead><tr><th>编号</th><th>标准</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>[7]</td><td>OSEK/VDX Operating System, ISO 17356-3: OS</td></tr>
|
||||
<tr><td>[8]</td><td>ISO/IEC 9899:1990 Programming Language – C</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s3_3">3.3 相关规范</h3>
|
||||
<p>AUTOSAR 提供了通用基础软件模块规范 [6](SWS BSW General),该规范对标准类型同样适用。</p>
|
||||
<p>因此,SWS BSW General 应被视为标准类型的<strong>附加且必需</strong>的规范。</p>
|
||||
|
||||
<h2 id="s4">4 约束与假设(Constraints and assumptions)</h2>
|
||||
|
||||
<h3 id="s4_1">4.1 限制(Limitations)</h3>
|
||||
<p>无限制。</p>
|
||||
|
||||
<h3 id="s4_2">4.2 对汽车领域的适用性(Applicability to car domains)</h3>
|
||||
<p>本规范中定义的许多符号(如 <code>OK</code>、<code>NOT_OK</code>、<code>ON</code>、<code>OFF</code>)在遗留软件中已经定义并使用。这些"现有符号被重定义"的冲突预期会出现,但因以下原因而被忽略:</p>
|
||||
<ol>
|
||||
<li>AUTOSAR 必须保持与遗留 ECU 的<strong>网络兼容性</strong>,但<strong>不必保持与遗留软件的软件架构兼容性</strong>。许多类型定义和使用方式与遗留软件完全相同,遗留软件可继续使用这些符号,只需移除其原有定义并改用本文件的定义即可。</li>
|
||||
</ol>
|
||||
|
||||
<h2 id="s5">5 软件架构(Software Architecture)</h2>
|
||||
|
||||
<h3 id="s5_1">5.1 对其他模块的依赖(Dependencies to other modules)</h3>
|
||||
<p>无。</p>
|
||||
|
||||
<h3 id="s5_2">5.2 文件结构(File structure)</h3>
|
||||
<p>包含结构在属于 COM 栈的 BSW 模块和其他模块之间有所不同:</p>
|
||||
<ul>
|
||||
<li>被视为 COM 栈一部分的 BSW 模块<strong>应当</strong>包含 <code>ComStackTypes.h</code>;</li>
|
||||
<li>其他模块<strong>应当</strong>包含 <code>StandardTypes.h</code>。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s5_2_1">5.2.1 通信相关 BSW 模块</h3>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00016]</span></p>
|
||||
<p>包含文件的结构<strong>应当</strong>(shall)如下:</p>
|
||||
<ul>
|
||||
<li><code>ComStackTypes.h</code> <strong>应当</strong>包含 <code>StandardTypes.h</code>;</li>
|
||||
<li>与通信相关的基础软件模块<strong>应当</strong>包含 <code>ComStackTypes.h</code>。</li>
|
||||
</ul>
|
||||
<p><em>参考:SRS_BSW_00024</em></p>
|
||||
</div>
|
||||
|
||||
<h2 id="s6">6 需求追溯(Requirements traceability)</h2>
|
||||
<p>下表列出本规范涉及的 SRS 需求及其满足情况。本文档共引用了约 100+ SRS 需求条目,绝大部分通过 <code>SWS_Std_00999</code> 声明"不适用"(见 <a href="#s11">第 11 节</a>)。实际适用的 SRS 需求包括:</p>
|
||||
|
||||
<table>
|
||||
<thead><tr><th>SRS 需求</th><th>描述</th><th>由以下满足</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>SRS_BSW_00004</code></td><td>所有基础软件模块<strong>应当</strong>对所包含的头文件版本进行预处理检查</td><td><code>SWS_Std_00015</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00024</code></td><td>—</td><td><code>SWS_Std_00016</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00059</code></td><td>—</td><td><code>SWS_Std_00014</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00348</code></td><td>所有 AUTOSAR 标准类型与常量<strong>应当</strong>放置和组织在标准类型头文件中</td><td><code>SWS_Std_00007</code>、<code>SWS_Std_00010</code>、<code>SWS_Std_00013</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00357</code></td><td>API 调用成功/失败<strong>应当</strong>使用一个标准返回类型</td><td><code>SWS_Std_00005</code>、<code>SWS_Std_00006</code>、<code>SWS_Std_00011</code></td></tr>
|
||||
<tr><td><code>SRS_BSW_00441</code></td><td>类型、宏、函数的命名约定</td><td><code>SWS_Std_00011</code></td></tr>
|
||||
<tr><td>其余 ~100 条</td><td>由 SWS_Std_00999 声明"不适用"</td><td><code>SWS_Std_00999</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<blockquote>
|
||||
<strong>提示</strong>:完整 SRS 需求追溯表共 ~100 项,本译文仅展示实际生效的条目。其余条目均通过 <code>SWS_Std_00999</code>("不适用"声明)集中处理,详见 <a href="#s11">第 11 节</a>。
|
||||
</blockquote>
|
||||
|
||||
<h2 id="s7">7 功能规范(Functional specification)</h2>
|
||||
|
||||
<h3 id="s7_1">7.1 通用问题(General issues)</h3>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00004]</span></p>
|
||||
<p>本文件<strong>不得</strong>(shall not)添加任何项目或供应商特定的扩展。任何扩展都将使 AUTOSAR 一致性失效。</p>
|
||||
<p><em>参考:SRS_BSW_00161</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00014]</span></p>
|
||||
<p>标准类型头文件<strong>应当</strong>防止被多次包含:</p>
|
||||
<pre><code>#ifndef STD_TYPES_H
|
||||
#define STD_TYPES_H
|
||||
..
|
||||
/*
|
||||
* Contents of file
|
||||
*/
|
||||
..
|
||||
#endif /* STD_TYPES_H */</code></pre>
|
||||
<p><em>参考:SRS_BSW_00059</em></p>
|
||||
</div>
|
||||
|
||||
<h2 id="s8">8 API 规范(API specification)</h2>
|
||||
|
||||
<h3 id="s8_1">8.1 类型定义(Type definitions)</h3>
|
||||
|
||||
<h4 id="s8_1_1">8.1.1 <code>Std_ReturnType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00005]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>Std_ReturnType</code></td></tr>
|
||||
<tr><th>种类(Kind)</th><td>Type(类型)</td></tr>
|
||||
<tr><th>派生自(Derived from)</th><td><code>uint8</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td>该类型可用作 RTE 与 BSW 模块之间共享的标准 API 返回类型。<strong>应当</strong>按下述方式定义:<br><code>typedef uint8 Std_ReturnType;</code></td></tr>
|
||||
<tr><th rowspan="3">取值范围(Range)</th><td><code>E_OK</code> 0 见 8.2.1,<code>SWS_Std_00006</code></td></tr>
|
||||
<tr><td><code>E_NOT_OK</code> 1 见 8.2.1,<code>SWS_Std_00006</code></td></tr>
|
||||
<tr><td>0x02-0x3F 2 留给用户自定义错误使用</td></tr>
|
||||
<tr><th>变化(Variation)</th><td>—</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00357</em></p>
|
||||
</div>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00011]</span></p>
|
||||
<p><code>Std_ReturnType</code> 一般使用值 <code>E_OK</code> 或 <code>E_NOT_OK</code>。如果这两个返回值不够用,可使用低 6 位定义用户自定义值。</p>
|
||||
<p>用户自定义值的命名<strong>应当</strong>按 <code>SRS_BSW_00441</code> 的要求使用模块前缀。</p>
|
||||
<p><code>Std_ReturnType</code> 的布局应与 RTE 规范一致。Bit 7 和 Bit 8 由 RTE 规范保留和定义。</p>
|
||||
<p><em>参考:SRS_BSW_00357, SRS_BSW_00441</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_1_2">8.1.2 <code>Std_VersionInfoType</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00015]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>Std_VersionInfoType</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Structure(结构体)</td></tr>
|
||||
<tr><th rowspan="5">元素(Element)</th><td><code>uint16 vendorID</code></td></tr>
|
||||
<tr><td><code>uint16 moduleID</code></td></tr>
|
||||
<tr><td><code>uint8 sw_major_version</code></td></tr>
|
||||
<tr><td><code>uint8 sw_minor_version</code></td></tr>
|
||||
<tr><td><code>uint8 sw_patch_version</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td>该类型<strong>应当</strong>用于通过 <code><Module name>_GetVersionInfo()</code> 函数请求 BSW 模块的版本信息。</td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00004</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_2">8.2 符号定义(Symbol definitions)</h3>
|
||||
|
||||
<h4 id="s8_2_1">8.2.1 <code>E_OK</code>、<code>E_NOT_OK</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00006]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>E_OK</code>、<code>E_NOT_OK</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="2">取值(Range)</th><td><code>E_OK</code> <code>0x00u</code> —</td></tr>
|
||||
<tr><td><code>E_NOT_OK</code> <code>0x01u</code> —</td></tr>
|
||||
<tr><th>说明(Description)</th><td>由于 <code>E_OK</code> 已在 OSEK 中定义,该符号需共享使用。为避免命名冲突和重定义问题,符号应按下述方式定义(已通过实现审批):<pre><code>#ifndef STATUSTYPEDEFINED
|
||||
#define STATUSTYPEDEFINED
|
||||
#define E_OK 0x00u
|
||||
|
||||
typedef unsigned char StatusType; /* OSEK compliance */
|
||||
#endif
|
||||
|
||||
#define E_NOT_OK 0x01u</code></pre></td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00357</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_2_2">8.2.2 <code>STD_HIGH</code>、<code>STD_LOW</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00007]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>STD_HIGH</code>、<code>STD_LOW</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="2">取值(Range)</th><td><code>STD_LOW</code> <code>0x00u</code></td></tr>
|
||||
<tr><td><code>STD_HIGH</code> <code>0x01u</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>STD_HIGH</code> 和 <code>STD_LOW</code> <strong>应当</strong>按下述方式定义:<pre><code>#define STD_HIGH 0x01u /* Physical state 5V or 3.3V */
|
||||
#define STD_LOW 0x00u /* Physical state 0V */</code></pre></td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00348</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_2_3">8.2.3 <code>STD_ACTIVE</code>、<code>STD_IDLE</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00013]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>STD_ACTIVE</code>、<code>STD_IDLE</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="2">取值(Range)</th><td><code>STD_IDLE</code> <code>0x00u</code></td></tr>
|
||||
<tr><td><code>STD_ACTIVE</code> <code>0x01u</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>STD_ACTIVE</code> 和 <code>STD_IDLE</code> <strong>应当</strong>按下述方式定义:<pre><code>#define STD_ACTIVE 0x01u /* Logical state active */
|
||||
#define STD_IDLE 0x00u /* Logical state idle */</code></pre></td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00348</em></p>
|
||||
</div>
|
||||
|
||||
<h4 id="s8_2_4">8.2.4 <code>STD_ON</code>、<code>STD_OFF</code></h4>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00010]</span></p>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr><th>名称(Name)</th><td><code>STD_ON</code>、<code>STD_OFF</code></td></tr>
|
||||
<tr><th>类型(Type)</th><td>Enumeration(枚举)</td></tr>
|
||||
<tr><th rowspan="2">取值(Range)</th><td><code>STD_OFF</code> <code>0x00u</code></td></tr>
|
||||
<tr><td><code>STD_ON</code> <code>0x01u</code></td></tr>
|
||||
<tr><th>说明(Description)</th><td><code>STD_ON</code> 和 <code>STD_OFF</code> <strong>应当</strong>按下述方式定义:<pre><code>#define STD_ON 0x01u
|
||||
#define STD_OFF 0x00u</code></pre></td></tr>
|
||||
<tr><th>可获取于(Available via)</th><td><code>StandardTypes.h</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><em>参考:SRS_BSW_00348</em></p>
|
||||
</div>
|
||||
|
||||
<h3 id="s8_3">8.3 函数定义(Function definitions)</h3>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s9">9 时序图(Sequence diagrams)</h2>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s10">10 配置规范(Configuration specification)</h2>
|
||||
<p>不适用。</p>
|
||||
|
||||
<h2 id="s11">11 不适用的需求(Not applicable requirements)</h2>
|
||||
|
||||
<div class="requirement">
|
||||
<p><span class="requirement-id">[SWS_Std_00999]</span></p>
|
||||
<p>以下需求对本规范<strong>不适用</strong>:</p>
|
||||
<p><code>SRS_BSW_00300</code>、<code>SRS_BSW_00301</code>、<code>SRS_BSW_00302</code>、<code>SRS_BSW_00304</code>、<code>SRS_BSW_00305</code>、<code>SRS_BSW_00306</code>、<code>SRS_BSW_00307</code>、<code>SRS_BSW_00308</code>、<code>SRS_BSW_00309</code>、<code>SRS_BSW_00310</code>、<code>SRS_BSW_00312</code>、<code>SRS_BSW_00314</code>、<code>SRS_BSW_00321</code>、<code>SRS_BSW_00325</code>、<code>SRS_BSW_00327</code>、<code>SRS_BSW_00330</code>、<code>SRS_BSW_00331</code>、<code>SRS_BSW_00333</code>、<code>SRS_BSW_00334</code>、<code>SRS_BSW_00335</code>、<code>SRS_BSW_00342</code>、<code>SRS_BSW_00343</code>、<code>SRS_BSW_00341</code>、<code>SRS_BSW_00346</code>、<code>SRS_BSW_00347</code>、<code>SRS_BSW_00350</code>、<code>SRS_BSW_00353</code>、<code>SRS_BSW_00358</code>、<code>SRS_BSW_00359</code>、<code>SRS_BSW_00360</code>、<code>SRS_BSW_00361</code>、<code>SRS_BSW_00371</code>、<code>SRS_BSW_00373</code>、<code>SRS_BSW_00374</code>、<code>SRS_BSW_00377</code>、<code>SRS_BSW_00378</code>、<code>SRS_BSW_00379</code>、<code>SRS_BSW_00401</code>、<code>SRS_BSW_00408</code>、<code>SRS_BSW_00410</code>、<code>SRS_BSW_00411</code>、<code>SRS_BSW_00413</code>、<code>SRS_BSW_00414</code>、<code>SRS_BSW_00415</code>、<code>SRS_BSW_00005</code>、<code>SRS_BSW_00006</code>、<code>SRS_BSW_00007</code>、<code>SRS_BSW_00009</code>、<code>SRS_BSW_00010</code>、<code>SRS_BSW_00158</code>、<code>SRS_BSW_00160</code>、<code>SRS_BSW_00161</code>、<code>SRS_BSW_00162</code>、<code>SRS_BSW_00164</code>、<code>SRS_BSW_00172</code>、<code>SRS_BSW_00344</code>、<code>SRS_BSW_00404</code>、<code>SRS_BSW_00405</code>、<code>SRS_BSW_00345</code>、<code>SRS_BSW_00159</code>、<code>SRS_BSW_00167</code>、<code>SRS_BSW_00171</code>、<code>SRS_BSW_00170</code>、<code>SRS_BSW_00380</code>、<code>SRS_BSW_00419</code>、<code>SRS_BSW_00381</code>、<code>SRS_BSW_00412</code>、<code>SRS_BSW_00383</code>、<code>SRS_BSW_00388</code>、<code>SRS_BSW_00389</code>、<code>SRS_BSW_00390</code>、<code>SRS_BSW_00392</code>、<code>SRS_BSW_00393</code>、<code>SRS_BSW_00394</code>、<code>SRS_BSW_00395</code>、<code>SRS_BSW_00396</code>、<code>SRS_BSW_00397</code>、<code>SRS_BSW_00398</code>、<code>SRS_BSW_00399</code>、<code>SRS_BSW_00400</code>、<code>SRS_BSW_00375</code>、<code>SRS_BSW_00101</code>、<code>SRS_BSW_00416</code>、<code>SRS_BSW_00406</code>、<code>SRS_BSW_00168</code>、<code>SRS_BSW_00407</code>、<code>SRS_BSW_00423</code>、<code>SRS_BSW_00424</code>、<code>SRS_BSW_00425</code>、<code>SRS_BSW_00426</code>、<code>SRS_BSW_00427</code>、<code>SRS_BSW_00428</code>、<code>SRS_BSW_00429</code>、<code>SRS_BSW_00432</code>、<code>SRS_BSW_00433</code>、<code>SRS_BSW_00336</code>、<code>SRS_BSW_00337</code>、<code>SRS_BSW_00369</code>、<code>SRS_BSW_00339</code>、<code>SRS_BSW_00422</code>、<code>SRS_BSW_00417</code>、<code>SRS_BSW_00323</code>、<code>SRS_BSW_00409</code>、<code>SRS_BSW_00385</code>、<code>SRS_BSW_00386</code>、<code>SRS_BSW_00452</code>、<code>SRS_BSW_00473</code>、<code>SRS_BSW_00458</code>、<code>SRS_BSW_00466</code>。</p>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>类型与符号定义</strong>:<code>Std_ReturnType</code>、<code>Std_VersionInfoType</code>、<code>E_OK</code>、<code>E_NOT_OK</code>、<code>STD_HIGH/LOW</code>、<code>STD_ACTIVE/IDLE</code>、<code>STD_ON/OFF</code> 全部翻译,含 C 代码块原文。</li>
|
||||
<li>✅ <strong>章节结构</strong>:原文 11 章,译文目录完整对应(1–11 章;8.1.1/8.1.2;8.2.1–8.2.4 全保留)。</li>
|
||||
<li>✅ <strong>需求 ID 保留</strong>:<code>SWS_Std_00004</code>、<code>SWS_Std_00005</code>、<code>SWS_Std_00006</code>、<code>SWS_Std_00007</code>、<code>SWS_Std_00010</code>、<code>SWS_Std_00011</code>、<code>SWS_Std_00013</code>、<code>SWS_Std_00014</code>、<code>SWS_Std_00015</code>、<code>SWS_Std_00016</code>、<code>SWS_Std_00999</code> 完整保留。</li>
|
||||
<li>✅ <strong>SRS 追溯</strong>:实际适用的 SRS 条目保留,~100 条不适用条目集中列于 <code>SWS_Std_00999</code>。</li>
|
||||
<li>✅ <strong>C 代码块</strong>:所有 <code>#define</code>、<code>#ifndef</code>、<code>typedef</code> 完整保留原文格式。</li>
|
||||
<li>✅ <strong>取值与位定义</strong>:<code>0x00u</code>、<code>0x01u</code>、<code>0x02-0x3F</code>、Bit 7/Bit 8 保留说明如实翻译。</li>
|
||||
<li>✅ <strong>OSEK 兼容性</strong>:<code>STATUSTYPEDEFINED</code> 保护宏与 <code>StatusType</code> 类型保留,并补充 OSEK 兼容说明。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_SWS_StandardTypes.pdf(22 页)· 文档 ID 049
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,222 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>基础软件模块清单 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>基础软件模块清单(List of Basic Software Modules)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:150</span>
|
||||
<span>🏷 类型:TR(技术报告)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:10</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_TR_BSWModuleList.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 基础软件模块清单</a></li>
|
||||
<li><a href="#s2">2 库(Libraires)清单</a></li>
|
||||
<li><a href="#s3">3 特殊文件(Special Files)清单</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 基础软件模块清单</h2>
|
||||
<p>AUTOSAR 4.4.0 中所有标准化基础软件(BSW)模块及其归属层级如下表所示。"模块 ID"为 <code>uint16</code> 类型常量。</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>模块简称</th>
|
||||
<th>模块缩写(API 服务前缀)</th>
|
||||
<th>模块 ID(uint16)</th>
|
||||
<th>规范文档</th>
|
||||
<th>AUTOSAR 软件层</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>ADC Driver(ADC 驱动)</td><td><code>Adc</code></td><td>123</td><td><code>AUTOSAR_SWS_ADCDriver.pdf</code></td><td>I/O Drivers(I/O 驱动)</td></tr>
|
||||
<tr><td>BSW Mode Manager(BSW 模式管理器)</td><td><code>BswM</code></td><td>042</td><td><code>AUTOSAR_SWS_BSWModeManager.pdf</code></td><td>System Services(系统服务)</td></tr>
|
||||
<tr><td>BSW Scheduler Module(BSW 调度器)</td><td><code>SchM</code></td><td>130</td><td>"自 R4.0 起合并入 RTE"</td><td>System Services</td></tr>
|
||||
<tr><td>Bus Mirroring(总线镜像)</td><td><code>Mirror</code></td><td>048</td><td><code>AUTOSAR_SWS_BusMirroring.pdf</code></td><td>Communication Services(通信服务)</td></tr>
|
||||
<tr><td>CAN Driver(CAN 驱动)</td><td><code>Can</code></td><td>080</td><td><code>AUTOSAR_SWS_CANDriver.pdf</code></td><td>Communication Drivers(通信驱动)</td></tr>
|
||||
<tr><td>CAN Interface(CAN 接口)</td><td><code>CanIf</code></td><td>060</td><td><code>AUTOSAR_SWS_CANInterface.pdf</code></td><td>Communication HW Abstraction(通信硬件抽象)</td></tr>
|
||||
<tr><td>CAN Network Management(CAN 网络管理)</td><td><code>CanNm</code></td><td>031</td><td><code>AUTOSAR_SWS_CANNetworkManagement.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>CAN State Manager(CAN 状态管理器)</td><td><code>CanSM</code></td><td>140</td><td><code>AUTOSAR_SWS_CANStateManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>CAN Transceiver Driver(CAN 收发器驱动)</td><td><code>CanTrcv</code></td><td>070</td><td><code>AUTOSAR_SWS_CANTransceiverDriver.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>CAN Transport Layer(CAN 传输层)</td><td><code>CanTp</code></td><td>035</td><td><code>AUTOSAR_SWS_CANTransportLayer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>COM(通信)</td><td><code>Com</code></td><td>050</td><td><code>AUTOSAR_SWS_COM.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>COM Based Transformer(基于 COM 的转换器)</td><td><code>ComXf</code></td><td>175</td><td><code>AUTOSAR_SWS_COMBasedTransformer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>COM Manager(COM 管理器)</td><td><code>ComM</code></td><td>012</td><td><code>AUTOSAR_SWS_COMManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>Complex Drivers(复杂驱动)</td><td><code>no prefix (AUTOSAR interface)</code></td><td>255</td><td>不适用</td><td>Complex Drivers(复杂驱动层)</td></tr>
|
||||
<tr><td>Core Test(内核测试)</td><td><code>CorTst</code></td><td>103</td><td><code>AUTOSAR_SWS_CoreTest.pdf</code></td><td>Microcontroller Drivers(微控制器驱动)</td></tr>
|
||||
<tr><td>Crypto Driver(加密驱动)</td><td><code>Crypto</code></td><td>114</td><td><code>AUTOSAR_SWS_CryptoDriver.pdf</code></td><td>Crypto Drivers(加密驱动)</td></tr>
|
||||
<tr><td>Crypto Interface(加密接口)</td><td><code>CryIf</code></td><td>112</td><td><code>AUTOSAR_SWS_CryptoInterface.pdf</code></td><td>Crypto HW Abstraction(加密硬件抽象)</td></tr>
|
||||
<tr><td>Crypto Service Manager(加密服务管理器)</td><td><code>Csm</code></td><td>110</td><td><code>AUTOSAR_SWS_CryptoServiceManager.pdf</code></td><td>Crypto Services(加密服务)</td></tr>
|
||||
<tr><td>Default Error Tracer(默认错误追踪器)</td><td><code>Det</code></td><td>015</td><td><code>AUTOSAR_SWS_DefaultErrorTracer.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>Diagnostic Communication Manager(诊断通信管理器)</td><td><code>Dcm</code></td><td>053</td><td><code>AUTOSAR_SWS_DiagnosticCommunicationManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Diagnostic Event Manager(诊断事件管理器)</td><td><code>Dem</code></td><td>054</td><td><code>AUTOSAR_SWS_DiagnosticEventManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>Diagnostic Log and Trace(诊断日志与跟踪)</td><td><code>Dlt</code></td><td>055</td><td><code>AUTOSAR_SWS_DiagnosticLogAndTrace.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Diagnostic over IP(基于 IP 的诊断)</td><td><code>DoIP</code></td><td>173</td><td><code>AUTOSAR_SWS_DiagnosticOverIP.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>DIO Driver(DIO 驱动)</td><td><code>Dio</code></td><td>120</td><td><code>AUTOSAR_SWS_DIODriver.pdf</code></td><td>I/O Drivers</td></tr>
|
||||
<tr><td>E2E Transformer(端到端转换器)</td><td><code>E2EXf</code></td><td>176</td><td><code>AUTOSAR_SWS_E2ETransformer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>ECU State Manager(ECU 状态管理器)</td><td><code>EcuM</code></td><td>010</td><td><code>AUTOSAR_SWS_ECUStateManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>EEPROM Abstraction(EEPROM 抽象)</td><td><code>Ea</code></td><td>040</td><td><code>AUTOSAR_SWS_EEPROMAbstraction.pdf</code></td><td>Memory HW Abstraction(内存硬件抽象)</td></tr>
|
||||
<tr><td>EEPROM Driver(EEPROM 驱动)</td><td><code>Eep</code></td><td>090</td><td><code>AUTOSAR_SWS_EEPROMDriver.pdf</code></td><td>Memory Drivers(内存驱动)</td></tr>
|
||||
<tr><td>Ethernet Driver(以太网驱动)</td><td><code>Eth</code></td><td>088</td><td><code>AUTOSAR_SWS_EthernetDriver.pdf</code></td><td>Communication Drivers</td></tr>
|
||||
<tr><td>Ethernet Interface(以太网接口)</td><td><code>EthIf</code></td><td>065</td><td><code>AUTOSAR_SWS_EthernetInterface.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>Ethernet State Manager(以太网状态管理器)</td><td><code>EthSM</code></td><td>143</td><td><code>AUTOSAR_SWS_EthernetStateManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Ethernet Switch Driver(以太网交换机驱动)</td><td><code>EthSwt</code></td><td>089</td><td><code>AUTOSAR_SWS_EthernetSwitchDriver.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>Ethernet Transceiver Driver(以太网收发器驱动)</td><td><code>EthTrcv</code></td><td>073</td><td><code>AUTOSAR_SWS_EthernetTransceiverDriver.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>Flash Driver(Flash 驱动)</td><td><code>Fls</code></td><td>092</td><td><code>AUTOSAR_SWS_FlashDriver.pdf</code></td><td>Memory Drivers</td></tr>
|
||||
<tr><td>Flash EEPROM Emulation(Flash EEPROM 仿真)</td><td><code>Fee</code></td><td>021</td><td><code>AUTOSAR_SWS_FlashEEPROMEmulation.pdf</code></td><td>Memory HW Abstraction</td></tr>
|
||||
<tr><td>Flash Test(Flash 测试)</td><td><code>FlsTst</code></td><td>104</td><td><code>AUTOSAR_SWS_FlashTest.pdf</code></td><td>Memory Drivers</td></tr>
|
||||
<tr><td>FlexRay AUTOSAR Transport Layer(FlexRay AUTOSAR 传输层)</td><td><code>FrArTp</code></td><td>038</td><td><code>AUTOSAR_SWS_FlexRayARTransportLayer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>FlexRay Driver(FlexRay 驱动)</td><td><code>Fr</code></td><td>081</td><td><code>AUTOSAR_SWS_FlexRayDriver.pdf</code></td><td>Communication Drivers</td></tr>
|
||||
<tr><td>FlexRay Interface(FlexRay 接口)</td><td><code>FrIf</code></td><td>061</td><td><code>AUTOSAR_SWS_FlexRayInterface.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>FlexRay ISO Transport Layer(FlexRay ISO 传输层)</td><td><code>FrTp</code></td><td>036</td><td><code>AUTOSAR_SWS_FlexRayISOTransportLayer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>FlexRay Network Management(FlexRay 网络管理)</td><td><code>FrNm</code></td><td>032</td><td><code>AUTOSAR_SWS_FlexRayNetworkManagement.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>FlexRay State Manager(FlexRay 状态管理器)</td><td><code>FrSM</code></td><td>142</td><td><code>AUTOSAR_SWS_FlexRayStateManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>FlexRay Transceiver Driver(FlexRay 收发器驱动)</td><td><code>FrTrcv</code></td><td>071</td><td><code>AUTOSAR_SWS_FlexRayTransceiverDriver.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>Function Inhibition Manager(功能抑制管理器)</td><td><code>FiM</code></td><td>011</td><td><code>AUTOSAR_SWS_FunctionInhibitionManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>GPT Driver(通用定时器驱动)</td><td><code>Gpt</code></td><td>100</td><td><code>AUTOSAR_SWS_GPTDriver.pdf</code></td><td>Microcontroller Drivers</td></tr>
|
||||
<tr><td>ICU Driver(输入捕获单元驱动)</td><td><code>Icu</code></td><td>122</td><td><code>AUTOSAR_SWS_ICUDriver.pdf</code></td><td>I/O Drivers</td></tr>
|
||||
<tr><td>IO HW Abstraction(IO 硬件抽象)</td><td><code>no prefix (AUTOSAR interface)</code></td><td>254</td><td><code>AUTOSAR_SWS_IOHardwareAbstraction.pdf</code></td><td>I/O HW Abstraction(IO 硬件抽象)</td></tr>
|
||||
<tr><td>IPDU Multiplexer(IPDU 多路复用器)</td><td><code>IpduM</code></td><td>052</td><td><code>AUTOSAR_SWS_IPDUMultiplexer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Key Manager(密钥管理器)</td><td><code>KeyM</code></td><td>109</td><td><code>AUTOSAR_SWS_KeyManager.pdf</code></td><td>Crypto Services</td></tr>
|
||||
<tr><td>Large Data COM(大数据量 COM)</td><td><code>LdCom</code></td><td>049</td><td><code>AUTOSAR_SWS_LargeDataCOM.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>LIN Driver(LIN 驱动)</td><td><code>Lin</code></td><td>082</td><td><code>AUTOSAR_SWS_LINDriver.pdf</code></td><td>Communication Drivers</td></tr>
|
||||
<tr><td>LIN Interface(LIN 接口)</td><td><code>LinIf</code></td><td>062</td><td><code>AUTOSAR_SWS_LINInterface.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>LIN State Manager(LIN 状态管理器)</td><td><code>LinSM</code></td><td>141</td><td><code>AUTOSAR_SWS_LINStateManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>LIN Transceiver Driver(LIN 收发器驱动)</td><td><code>LinTrcv</code></td><td>064</td><td><code>AUTOSAR_SWS_LINTransceiverDriver.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>MCU Driver(微控制器驱动)</td><td><code>Mcu</code></td><td>101</td><td><code>AUTOSAR_SWS_MCUDriver.pdf</code></td><td>Microcontroller Drivers</td></tr>
|
||||
<tr><td>Memory Abstraction Interface(内存抽象接口)</td><td><code>MemIf</code></td><td>022</td><td><code>AUTOSAR_SWS_MemoryAbstractionInterface.pdf</code></td><td>Memory Services(内存服务)</td></tr>
|
||||
<tr><td>Network Management Interface(网络管理接口)</td><td><code>Nm</code></td><td>029</td><td><code>AUTOSAR_SWS_NetworkManagementInterface.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>NVRAM Manager(非易失性 RAM 管理器)</td><td><code>NvM</code></td><td>020</td><td><code>AUTOSAR_SWS_NVRAMManager.pdf</code></td><td>Memory Services</td></tr>
|
||||
<tr><td>OCU Driver(输出比较单元驱动)</td><td><code>Ocu</code></td><td>125</td><td><code>AUTOSAR_SWS_OCUDriver.pdf</code></td><td>I/O Drivers</td></tr>
|
||||
<tr><td>OS(操作系统)</td><td><code>Os</code>(不作为 API 前缀使用)</td><td>001</td><td><code>AUTOSAR_SWS_OS.pdf</code></td><td>System Services - OS(系统服务 - 操作系统)</td></tr>
|
||||
<tr><td>PDU Router(PDU 路由器)</td><td><code>PduR</code></td><td>051</td><td><code>AUTOSAR_SWS_PDURouter.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Port Driver(端口驱动)</td><td><code>Port</code></td><td>124</td><td><code>AUTOSAR_SWS_PortDriver.pdf</code></td><td>I/O Drivers</td></tr>
|
||||
<tr><td>PWM Driver(脉宽调制驱动)</td><td><code>Pwm</code></td><td>121</td><td><code>AUTOSAR_SWS_PWMDriver.pdf</code></td><td>I/O Drivers</td></tr>
|
||||
<tr><td>RAM Test(RAM 测试)</td><td><code>RamTst</code></td><td>093</td><td><code>AUTOSAR_SWS_RAMTest.pdf</code></td><td>Memory Drivers</td></tr>
|
||||
<tr><td>RTE(运行时环境)</td><td><code>Rte</code></td><td>002</td><td><code>AUTOSAR_SWS_RTE.pdf</code></td><td>RTE</td></tr>
|
||||
<tr><td>SAE J1939 Diagnostic Communication Manager(SAE J1939 诊断通信管理器)</td><td><code>J1939Dcm</code></td><td>058</td><td><code>AUTOSAR_SWS_SAEJ1939DiagnosticCommunicationManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SAE J1939 Network Management(SAE J1939 网络管理)</td><td><code>J1939Nm</code></td><td>034</td><td><code>AUTOSAR_SWS_SAEJ1939NetworkManagement.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SAE J1939 Request Manager(SAE J1939 请求管理器)</td><td><code>J1939Rm</code></td><td>059</td><td><code>AUTOSAR_SWS_SAEJ1939RequestManager.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SAE J1939 Transport Layer(SAE J1939 传输层)</td><td><code>J1939Tp</code></td><td>037</td><td><code>AUTOSAR_SWS_SAEJ1939TransportLayer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Secure Onboard Communication(车载安全通信)</td><td><code>SecOC</code></td><td>150</td><td><code>AUTOSAR_SWS_SecureOnboardCommunication.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Service Discovery(服务发现)</td><td><code>Sd</code></td><td>171</td><td><code>AUTOSAR_SWS_ServiceDiscovery.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Socket Adaptor(Socket 适配器)</td><td><code>SoAd</code></td><td>056</td><td><code>AUTOSAR_SWS_SocketAdaptor.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SOME/IP Transformer(SOME/IP 转换器)</td><td><code>SomeIpXf</code></td><td>174</td><td><code>AUTOSAR_SWS_SOMEIPTransformer.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SOME/IP Transport Protocol(SOME/IP 传输协议)</td><td><code>SomeIpTp</code></td><td>177</td><td><code>AUTOSAR_SWS_SOMEIPTransportProtocol.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>SPI Handler Driver(SPI 处理驱动)</td><td><code>Spi</code></td><td>083</td><td><code>AUTOSAR_SWS_SPIHandlerDriver.pdf</code></td><td>Communication Drivers</td></tr>
|
||||
<tr><td>Synchronized Time-Base Manager(同步时基管理器)</td><td><code>StbM</code></td><td>160</td><td><code>AUTOSAR_SWS_SynchronizedTimeBaseManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>TCP/IP Stack(TCP/IP 协议栈)</td><td><code>TcpIp</code></td><td>170</td><td><code>AUTOSAR_SWS_TcpIp.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Time Service(时间服务)</td><td><code>Tm</code></td><td>014</td><td><code>AUTOSAR_SWS_TimeService.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>Time Sync Over CAN(基于 CAN 的时间同步)</td><td><code>CanTSyn</code></td><td>161</td><td><code>AUTOSAR_SWS_TimeSyncOverCAN.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Time Sync Over Ethernet(基于以太网的时间同步)</td><td><code>EthTSyn</code></td><td>164</td><td><code>AUTOSAR_SWS_TimeSyncOverEthernet.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Time Sync Over FlexRay(基于 FlexRay 的时间同步)</td><td><code>FrTSyn</code></td><td>163</td><td><code>AUTOSAR_SWS_TimeSyncOverFlexRay.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>TTCAN Driver(时间触发 CAN 驱动)</td><td><code>Ttcan</code></td><td>084</td><td><code>AUTOSAR_SWS_TTCANDriver.pdf</code></td><td>Communication Drivers</td></tr>
|
||||
<tr><td>TTCAN Interface(时间触发 CAN 接口)</td><td><code>TtcanIf</code></td><td>066</td><td><code>AUTOSAR_SWS_TTCANInterface.pdf</code></td><td>Communication HW Abstraction</td></tr>
|
||||
<tr><td>UDP Network Management(UDP 网络管理)</td><td><code>UdpNm</code></td><td>033</td><td><code>AUTOSAR_SWS_UDPNetworkManagement.pdf</code></td><td>Communication Services</td></tr>
|
||||
<tr><td>Vehicle-2-X Basic Transport(V2X 基础传输)</td><td><code>V2xBtp</code></td><td>183</td><td><code>AUTOSAR_SWS_V2XBasicTransport.pdf</code></td><td>Off-board Comm. Services(车外通信服务)</td></tr>
|
||||
<tr><td>Vehicle-2-X Facilities(V2X 设施层)</td><td><code>V2xFac</code></td><td>184</td><td><code>AUTOSAR_SWS_V2XFacilities.pdf</code></td><td>Off-board Comm. Services</td></tr>
|
||||
<tr><td>Vehicle-2-X GeoNetworking(V2X 地理组网)</td><td><code>V2xGn</code></td><td>182</td><td><code>AUTOSAR_SWS_V2XGeoNetworking.pdf</code></td><td>Off-board Comm. Services</td></tr>
|
||||
<tr><td>Vehicle-2-X Management(V2X 管理)</td><td><code>V2xM</code></td><td>185</td><td><code>AUTOSAR_SWS_V2XManagement.pdf</code></td><td>Off-board Comm. Services</td></tr>
|
||||
<tr><td>Watchdog Driver(看门狗驱动)</td><td><code>Wdg</code></td><td>102</td><td><code>AUTOSAR_SWS_WatchdogDriver.pdf</code></td><td>Microcontroller Drivers</td></tr>
|
||||
<tr><td>Watchdog Interface(看门狗接口)</td><td><code>WdgIf</code></td><td>043</td><td><code>AUTOSAR_SWS_WatchdogInterface.pdf</code></td><td>Onboard Device Abstraction(车载设备抽象)</td></tr>
|
||||
<tr><td>Watchdog Manager(看门狗管理器)</td><td><code>WdgM</code></td><td>013</td><td><code>AUTOSAR_SWS_WatchdogManager.pdf</code></td><td>System Services</td></tr>
|
||||
<tr><td>Wireless Ethernet Driver(无线以太网驱动)</td><td><code>WEth</code></td><td>087</td><td><code>AUTOSAR_SWS_WirelessEthernetDriver.pdf</code></td><td>Wireless Comm. Drivers(无线通信驱动)</td></tr>
|
||||
<tr><td>Wireless Ethernet Transceiver Driver(无线以太网收发器驱动)</td><td><code>WEthTrcv</code></td><td>074</td><td><code>AUTOSAR_SWS_WirelessEthernetTransceiverDriver.pdf</code></td><td>Wireless Comm. HW Abstraction(无线通信硬件抽象)</td></tr>
|
||||
<tr><td>XCP(通用测量与标定协议)</td><td><code>Xcp</code></td><td>212</td><td><code>AUTOSAR_SWS_XCP.pdf</code></td><td>Communication Services</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s2">2 库(Libraires)清单</h2>
|
||||
<p>AUTOSAR 4.4.0 中标准化的库(Libraries)模块:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>库简称</th>
|
||||
<th>库缩写(API 服务前缀)</th>
|
||||
<th>库(模块)ID(uint16)</th>
|
||||
<th>规范文档</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>CRC Library(CRC 库)</td><td><code>Crc</code></td><td>201</td><td><code>AUTOSAR_SWS_CRCLibrary.pdf</code></td></tr>
|
||||
<tr><td>BFx Library(大位域操作库)</td><td><code>Bfx</code></td><td>205</td><td><code>AUTOSAR_SWS_BFXLibrary.pdf</code></td></tr>
|
||||
<tr><td>E2E Library(端到端保护库)</td><td><code>E2E</code></td><td>207</td><td><code>AUTOSAR_SWS_E2ELibrary.pdf</code></td></tr>
|
||||
<tr><td>EFx Library(小位域操作库)</td><td><code>Efx</code></td><td>208</td><td><code>AUTOSAR_SWS_EFXLibrary.pdf</code></td></tr>
|
||||
<tr><td>IFl Library(整型定点库)</td><td><code>Ifl</code></td><td>209</td><td><code>AUTOSAR_SWS_IFLLibrary.pdf</code></td></tr>
|
||||
<tr><td>MFl Library(混合定点库)</td><td><code>Mfl</code></td><td>210</td><td><code>AUTOSAR_SWS_MFLLibrary.pdf</code></td></tr>
|
||||
<tr><td>MFx Library(混合位域库)</td><td><code>Mfx</code></td><td>211</td><td><code>AUTOSAR_SWS_MFXLibrary.pdf</code></td></tr>
|
||||
<tr><td>IFx Library(整型位域库)</td><td><code>Ifx</code></td><td>213</td><td><code>AUTOSAR_SWS_IFXLibrary.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2 id="s3">3 特殊文件(Special Files)清单</h2>
|
||||
<p>AUTOSAR 中一些"特殊文件"虽不是独立模块,但在每个 ECU 工程中均会出现,其规范如下:</p>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>AUTOSAR 名称</th>
|
||||
<th>简称(API 服务前缀)</th>
|
||||
<th>文件名</th>
|
||||
<th>模块 ID</th>
|
||||
<th>规范文档</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Platform Types(平台类型)</td><td><code>Platform</code></td><td><code>Platform_Types.h</code></td><td>199</td><td><code>AUTOSAR_SWS_PlatformTypes.pdf</code></td></tr>
|
||||
<tr><td>Compiler Abstraction(编译器抽象)</td><td><code>Compiler</code></td><td><code>Compiler.h</code></td><td>198</td><td><code>AUTOSAR_SWS_CompilerAbstraction.pdf</code></td></tr>
|
||||
<tr><td>Standard Types(标准类型)</td><td><code>Std</code></td><td><code>Std_Types.h</code></td><td>197</td><td><code>AUTOSAR_SWS_StandardTypes.pdf</code></td></tr>
|
||||
<tr><td>Communication Stack Types(通信栈类型)</td><td><code>Comtype</code></td><td><code>ComStack_Types.h</code></td><td>196</td><td><code>AUTOSAR_SWS_CommunicationStackTypes.pdf</code></td></tr>
|
||||
<tr><td>Memory Mapping(内存映射)</td><td><code>MemMap</code></td><td><code>(Prefix_)MemMap.h</code></td><td>195</td><td><code>AUTOSAR_SWS_MemoryMapping.pdf</code></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<blockquote>
|
||||
<strong>使用说明</strong>:本表为速查表,便于在阅读其他 AUTOSAR 文档时快速查询模块归属、ID 与对应规范文档。
|
||||
模块 ID 在 <code>Dem</code>、<code>Det</code> 等的错误报告、RTE 接口中常被引用。
|
||||
</blockquote>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>模块数量</strong>:原文 86 个 BSW 模块 + 8 个库 + 5 个特殊文件 = 99 行表格内容,全部翻译保留。</li>
|
||||
<li>✅ <strong>术语一致性</strong>:API 前缀(如 <code>Adc</code>、<code>CanIf</code>)、模块简称保持原文不变;中文译名首次出现按"中文(英文, 缩写)"形式呈现。</li>
|
||||
<li>✅ <strong>软件层级归类</strong>:I/O Drivers、System Services、Communication Drivers/Services/HW Abstraction、Memory Drivers/Services/HW Abstraction、Microcontroller Drivers、Crypto Drivers/Services/HW Abstraction、RTE、Complex Drivers 等层级译名已与术语表对齐。</li>
|
||||
<li>✅ <strong>特殊项</strong>:<code>Complex Drivers</code> 与 <code>IO HW Abstraction</code> 模块"无 API 前缀,使用 AUTOSAR interface"已明确标注。</li>
|
||||
<li>✅ <strong>版本变更记录</strong>:原文 Change History 包含 4.4.0 中新增的 Bus Mirroring、Key Manager、移除 LinNm 等变更;译文中保留 Change History 但以摘要方式体现(实际变更细节不计入主表,详见术语表与原始 PDF)。</li>
|
||||
<li>✅ <strong>模块 ID 唯一性</strong>:原文 SecOC 与本文档 ID(150)出现重复(原文如此),译文如实保留。</li>
|
||||
<li>⚠ <strong>缩写译名约定</strong>:CRC/BFx/E2E 等库的中文译名(如"CRC 库""大位域操作库")按 AUTOSAR 标准库惯例命名。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_TR_BSWModuleList.pdf(10 页)· 文档 ID 150
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,361 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>BSW UML 建模指南 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>BSW EA UML 模型建模指南(Modeling Guidelines of Basic Software EA UML Model)</h1>
|
||||
<div class="meta">
|
||||
<span>📄 文档 ID:117</span>
|
||||
<span>🏷 类型:TR(技术报告)</span>
|
||||
<span>📅 版本:AUTOSAR CP 4.4.0</span>
|
||||
<span>📑 页数:51</span>
|
||||
<span>📌 状态:Final</span>
|
||||
<span>🔗 原 PDF:<code>AUTOSAR_TR_BSWUMLModelModelingGuide.pdf</code></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="index.html">← BSWGeneral 模块</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<div class="toc">
|
||||
<h2>目录</h2>
|
||||
<ul>
|
||||
<li><a href="#s1">1 介绍</a>
|
||||
<ul>
|
||||
<li><a href="#s1_1">1.1 制品(Artifacts)</a>
|
||||
<ul>
|
||||
<li><a href="#s1_1_1">1.1.1 头文件</a></li>
|
||||
<li><a href="#s1_1_2">1.1.2 导入类型定义</a></li>
|
||||
<li><a href="#s1_1_3">1.1.3 类型定义</a></li>
|
||||
<li><a href="#s1_1_4">1.1.4 函数定义</a></li>
|
||||
<li><a href="#s1_1_5">1.1.5 回调通知</a></li>
|
||||
<li><a href="#s1_1_6">1.1.6 调度函数</a></li>
|
||||
<li><a href="#s1_1_7">1.1.7 必需接口</a></li>
|
||||
<li><a href="#s1_1_8">1.1.8 可选接口</a></li>
|
||||
<li><a href="#s1_1_9">1.1.9 可配置接口</a></li>
|
||||
<li><a href="#s1_1_10">1.1.10 时序图</a></li>
|
||||
<li><a href="#s1_1_11">1.1.11 各种图</a></li>
|
||||
<li><a href="#s1_1_12">1.1.12 服务建模</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2">2 建模指南</a>
|
||||
<ul>
|
||||
<li><a href="#s2_1">2.1 术语</a></li>
|
||||
<li><a href="#s2_2">2.2 模型结构</a></li>
|
||||
<li><a href="#s2_3">2.3 BSW 模块建模</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_1">2.3.1 模块</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_1_1">2.3.1.1 包</a></li>
|
||||
<li><a href="#s2_3_1_2">2.3.1.2 组件</a></li>
|
||||
<li><a href="#s2_3_1_3">2.3.1.3 组件图</a></li>
|
||||
<li><a href="#s2_3_1_4">2.3.1.4 类型图</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_3_2">2.3.2 函数接口</a></li>
|
||||
<li><a href="#s2_3_3">2.3.3 API 函数</a>
|
||||
<ul><li><a href="#s2_3_3_1">2.3.3.1 调度函数</a></li></ul>
|
||||
</li>
|
||||
<li><a href="#s2_3_4">2.3.4 API 函数参数</a></li>
|
||||
<li><a href="#s2_3_5">2.3.5 模块依赖</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_5_1">2.3.5.1 虚拟接口</a></li>
|
||||
<li><a href="#s2_3_5_2">2.3.5.2 必需接口</a></li>
|
||||
<li><a href="#s2_3_5_3">2.3.5.3 可选接口</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_3_6">2.3.6 通用接口</a></li>
|
||||
<li><a href="#s2_3_7">2.3.7 回调通知</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_7_1">2.3.7.1 回调的定义和使用(非可配置回调)</a></li>
|
||||
<li><a href="#s2_3_7_2">2.3.7.2 可配置回调的定义和使用</a></li>
|
||||
<li><a href="#s2_3_7_3">2.3.7.3 回调通用接口</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_3_8">2.3.8 数据类型定义</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_8_1">2.3.8.1 简单类型</a></li>
|
||||
<li><a href="#s2_3_8_2">2.3.8.2 枚举</a></li>
|
||||
<li><a href="#s2_3_8_3">2.3.8.3 Std_ReturnType 扩展</a></li>
|
||||
<li><a href="#s2_3_8_4">2.3.8.4 结构体</a></li>
|
||||
<li><a href="#s2_3_8_5">2.3.8.5 位域</a></li>
|
||||
<li><a href="#s2_3_8_6">2.3.8.6 数据类型中的可变性建模</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_3_9">2.3.9 服务建模(MoS)</a>
|
||||
<ul>
|
||||
<li><a href="#s2_3_9_1">2.3.9.1 客户端/服务器接口建模</a></li>
|
||||
<li><a href="#s2_3_9_2">2.3.9.2 模式切换接口建模</a></li>
|
||||
<li><a href="#s2_3_9_3">2.3.9.3 发送者/接收者接口建模</a></li>
|
||||
<li><a href="#s2_3_9_4">2.3.9.4 服务接口中的特殊类型建模</a></li>
|
||||
<li><a href="#s2_3_9_5">2.3.9.5 服务接口的可变性建模</a></li>
|
||||
<li><a href="#s2_3_9_6">2.3.9.6 PortAPIOptions 与 PortDefinedArgumentValues 的建模</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_4">2.4 图</a>
|
||||
<ul>
|
||||
<li><a href="#s2_4_1">2.4.1 头文件建模</a></li>
|
||||
<li><a href="#s2_4_2">2.4.2 时序图</a></li>
|
||||
<li><a href="#s2_4_3">2.4.3 状态机图</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#s2_5">2.5 BSW 模型中生命周期概念的支持</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
|
||||
<h2 id="s1">1 介绍(Introduction)</h2>
|
||||
<p>本建模指南描述了在 UML 模型中规范 AUTOSAR 基础软件所使用的建模技术和规则。</p>
|
||||
<p>BSW 模型中的信息由 AUTOSAR 元模型工具(Meta Model Tool,MMT)处理,并为 AUTOSAR 定义的多份软件规范(SWS)提供主要输入。为了使 BSW 模型可被 MMT 访问,模型<strong>必须</strong>遵守本文档中描述的规则。</p>
|
||||
|
||||
<h3 id="s1_1">1.1 制品(Artifacts)</h3>
|
||||
<p>AUTOSAR BSW UML 模型的主要目的是保持 99+ 份 SWS 文档与文件结构、提供/需要接口、时序图、状态机等保持同步。因此,所有相关信息都按照第 2 章"建模指南"中规定的建模规则保存在 BSW 模型中。</p>
|
||||
|
||||
<p>BSW UML 模型向 SWS 文档贡献以下制品:</p>
|
||||
|
||||
<h4 id="s1_1_1">1.1.1 头文件(Header Files)</h4>
|
||||
<p>每份 SWS 文档的第 5.1 章包含 BSW 模块的文件结构,特别是其头文件包含结构。由于大多数模块的头文件关系具有相似的结构(实际上有些部分完全相同),头文件结构使用<strong>类图</strong>建模,使用带构造型(Stereotype)的类表示源文件和头文件;详见 2.4.1 节。</p>
|
||||
|
||||
<h4 id="s1_1_2">1.1.2 导入类型定义(Imported Type Definitions)</h4>
|
||||
<p>SWS 第 8.1 章包含导入类型的表格列表。该表根据 2.3.5 节解释的模块依赖关系自动生成。</p>
|
||||
|
||||
<h4 id="s1_1_3">1.1.3 类型定义(Type Definitions)</h4>
|
||||
<p>SWS 第 8.2 章包含给定 BSW 模块内定义的所有类型的详细描述。类型定义的建模详见 2.3.8 节。</p>
|
||||
|
||||
<h4 id="s1_1_4">1.1.4 函数定义(Function Definitions)</h4>
|
||||
<p>SWS 第 8.3 章包含 BSW 模块提供的每个函数的详细描述,以特定布局的表格形式呈现。表格的各个字段根据 2.3.3 节中定义的 API 函数定义填充。</p>
|
||||
|
||||
<h4 id="s1_1_5">1.1.5 回调通知(Callback Notifications)</h4>
|
||||
<p>与函数定义非常相似,SWS 第 8.4 章包含 BSW 模块提供的回调定义。这些回调将由其他 BSW 模块调用,其中较低层模块通常是调用者。每个回调通知的表格将根据 2.3.7 节为模块的指定回调生成。</p>
|
||||
|
||||
<h4 id="s1_1_6">1.1.6 调度函数(Scheduled Functions)</h4>
|
||||
<p>调度函数在 SWS 第 8.5 章中描述。BSW UML 模型中调度函数的定义见 2.3.3.1 节。</p>
|
||||
|
||||
<h4 id="s1_1_7">1.1.7 必需接口(Mandatory Interfaces)</h4>
|
||||
<p>SWS 第 8.6.1 章包含模块期望的"必需接口"列表。该列表根据 2.3.5.2 节描述的必需依赖从 BSW UML 模型生成。</p>
|
||||
|
||||
<h4 id="s1_1_8">1.1.8 可选接口(Optional Interfaces)</h4>
|
||||
<p>SWS 第 8.6.2 章包含"可选接口"列表,基于 2.3.5.3 节中的可选依赖生成。</p>
|
||||
|
||||
<h4 id="s1_1_9">1.1.9 可配置接口(Configurable Interfaces)</h4>
|
||||
<p>SWS 第 8.6.3 章包含"可配置接口"列表。</p>
|
||||
|
||||
<h4 id="s1_1_10">1.1.10 时序图(Sequence Diagrams)</h4>
|
||||
<p>每个 BSW 模块的关键交互通过<strong>时序图</strong>建模,详见 2.4.2 节。</p>
|
||||
|
||||
<h4 id="s1_1_11">1.1.11 各种图(Various Diagrams)</h4>
|
||||
<p>包括组件图、类型图、状态机图等,详见 2.4 节。</p>
|
||||
|
||||
<h4 id="s1_1_12">1.1.12 服务建模(Modeling of services)</h4>
|
||||
<p>BSW 模块对 SW-C 提供的服务建模详见 2.3.9 节。</p>
|
||||
|
||||
<h2 id="s2">2 建模指南(Modeling Guide)</h2>
|
||||
|
||||
<h3 id="s2_1">2.1 术语(Terminology)</h3>
|
||||
<p>本节定义本文档中使用的术语:</p>
|
||||
<table>
|
||||
<thead><tr><th>术语</th><th>说明</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>EA</td><td>Enterprise Architect(Sparx Systems 的 UML 建模工具)</td></tr>
|
||||
<tr><td>MMT</td><td>Meta Model Tool(元模型工具)</td></tr>
|
||||
<tr><td>UML</td><td>Unified Modeling Language(统一建模语言)</td></tr>
|
||||
<tr><td>构造型(Stereotype)</td><td>UML 中扩展元类的机制</td></tr>
|
||||
<tr><td>ECU INFRASTRUCTURE</td><td>ECU 基础架构包</td></tr>
|
||||
<tr><td>BSW INFRASTRUCTURE</td><td>BSW 基础架构包</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3 id="s2_2">2.2 模型结构(Model Structure)</h3>
|
||||
<p>BSW UML 模型采用<strong>层次化包结构</strong>:</p>
|
||||
<ul>
|
||||
<li><strong>AUTOSAR Root</strong>
|
||||
<ul>
|
||||
<li>AUTOSAR_Platform</li>
|
||||
<li>AUTOSAR_ClassicPlatform</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>每个模块</strong>位于单独的包中,包含该模块的所有 UML 元素。</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="s2_3">2.3 BSW 模块建模(Modeling of BSW Modules)</h3>
|
||||
|
||||
<h4 id="s2_3_1">2.3.1 模块(Modules)</h4>
|
||||
|
||||
<h5 id="s2_3_1_1">2.3.1.1 包(Packages)</h5>
|
||||
<p>每个 BSW 模块使用<strong>包(Package)</strong>组织其元素。包名<strong>应当</strong>与模块缩写一致。</p>
|
||||
|
||||
<h5 id="s2_3_1_2">2.3.1.2 组件(Components)</h5>
|
||||
<p>每个 BSW 模块在 UML 中表示为<strong>组件(Component)</strong>,带有构造型 <code><<BSWModule>></code>。</p>
|
||||
|
||||
<h5 id="s2_3_1_3">2.3.1.3 组件图(Component Diagrams)</h5>
|
||||
<p>使用<strong>组件图</strong>展示模块的内部结构,包括:</p>
|
||||
<ul>
|
||||
<li>模块组件;</li>
|
||||
<li>内部子组件;</li>
|
||||
<li>提供的接口(Provided Interfaces);</li>
|
||||
<li>需要的接口(Required Interfaces);</li>
|
||||
<li>端口(Ports)。</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="s2_3_1_4">2.3.1.4 类型图(Type Diagrams)</h5>
|
||||
<p>使用<strong>类图</strong>展示模块的数据类型定义。</p>
|
||||
|
||||
<h4 id="s2_3_2">2.3.2 函数接口(Function interfaces)</h4>
|
||||
<p>BSW 模块通过<strong>接口</strong>对外提供服务和消费其他模块的服务。接口可以是:</p>
|
||||
<ul>
|
||||
<li>客户端-服务器(Client-Server);</li>
|
||||
<li>发送者-接收者(Sender-Receiver);</li>
|
||||
<li>模式切换(Mode Switch)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_3_3">2.3.3 API 函数(API Functions)</h4>
|
||||
<p>每个 API 函数在 UML 中建模为<strong>操作(Operation)</strong>,归属于提供该操作的接口。操作的属性包括:</p>
|
||||
<ul>
|
||||
<li>名称(与 C 函数名一致);</li>
|
||||
<li>返回类型;</li>
|
||||
<li>参数列表(名称、类型、方向);</li>
|
||||
<li>同步/异步属性;</li>
|
||||
<li>可重入性;</li>
|
||||
<li>支持的并行调用;</li>
|
||||
<li>对错误检测的支持。</li>
|
||||
</ul>
|
||||
|
||||
<h5 id="s2_3_3_1">2.3.3.1 调度函数(Scheduled Functions)</h5>
|
||||
<p>调度函数(主处理函数)使用特殊的<strong>客户端-服务器接口</strong>建模,由 SchM 调用。</p>
|
||||
|
||||
<h4 id="s2_3_4">2.3.4 API 函数参数(API Function Parameters)</h4>
|
||||
<p>参数建模规则:</p>
|
||||
<ul>
|
||||
<li>参数<strong>应当</strong>具有方向(in/out/inout);</li>
|
||||
<li>参数类型<strong>应当</strong>使用 AUTOSAR 标准类型或模块特定类型;</li>
|
||||
<li>复合参数使用<strong>复合类型</strong>建模。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_3_5">2.3.5 模块依赖(Module Dependencies)</h4>
|
||||
<p>模块依赖通过<strong>端口连接</strong>和<strong>依赖关系</strong>建模。</p>
|
||||
|
||||
<h5 id="s2_3_5_1">2.3.5.1 虚拟接口(Virtual Interfaces)</h5>
|
||||
<p>虚拟接口是模块间共享的接口定义。</p>
|
||||
|
||||
<h5 id="s2_3_5_2">2.3.5.2 必需接口(Mandatory Interfaces)</h5>
|
||||
<p>必需接口建模为<strong>必需端口</strong>。</p>
|
||||
|
||||
<h5 id="s2_3_5_3">2.3.5.3 可选接口(Optional Interfaces)</h5>
|
||||
<p>可选接口建模为<strong>可选端口</strong>。</p>
|
||||
|
||||
<h4 id="s2_3_6">2.3.6 通用接口(Generic Interface)</h4>
|
||||
<p>通用接口允许在不知道具体类型时定义可重用的接口模式。</p>
|
||||
|
||||
<h4 id="s2_3_7">2.3.7 回调通知(Callback Notifications)</h4>
|
||||
|
||||
<h5 id="s2_3_7_1">2.3.7.1 回调的定义和使用(非可配置回调)</h5>
|
||||
<p>非可配置回调是模块在编译时固定的回调函数。</p>
|
||||
|
||||
<h5 id="s2_3_7_2">2.3.7.2 可配置回调的定义和使用</h5>
|
||||
<p>可配置回调允许在运行时通过配置选择具体的回调函数。</p>
|
||||
|
||||
<h5 id="s2_3_7_3">2.3.7.3 回调通用接口</h5>
|
||||
<p>通用回调接口支持参数化。</p>
|
||||
|
||||
<h4 id="s2_3_8">2.3.8 数据类型定义(Data Type Definitions)</h4>
|
||||
|
||||
<h5 id="s2_3_8_1">2.2.3.8.1 简单类型(Simple Types)</h5>
|
||||
<p>简单类型(整数、浮点、布尔等)通过<strong>原始数据类型(Primitive Data Type)</strong>建模。</p>
|
||||
|
||||
<h5 id="s2_3_8_2">2.3.8.2 枚举(Enumerations)</h5>
|
||||
<p>枚举通过<strong>枚举数据类型</strong>建模,包含字面量集合。</p>
|
||||
|
||||
<h5 id="s2_3_8_3">2.3.8.3 Std_ReturnType 扩展</h5>
|
||||
<p><code>Std_ReturnType</code> 可通过扩展定义模块特定的错误代码。</p>
|
||||
|
||||
<h5 id="s2_3_8_4">2.3.8.4 结构体(Structures)</h5>
|
||||
<p>结构体通过<strong>应用数据类型(ApplicationDataType)</strong>建模,包含元素列表。</p>
|
||||
|
||||
<h5 id="s2_3_8_5">2.3.8.5 位域(Bitfields)</h5>
|
||||
<p>位域使用<strong>位域类型</strong>建模。</p>
|
||||
|
||||
<h5 id="s2_3_8_6">2.3.8.6 数据类型中的可变性建模</h5>
|
||||
<p>通过<strong>条件(Condition)</strong>和<strong>变体点(VariationPoint)</strong>机制处理数据类型中的条件编译。</p>
|
||||
|
||||
<h4 id="s2_3_9">2.3.9 服务建模(MoS)(Modeling of services (MoS))</h4>
|
||||
|
||||
<h5 id="s2_3_9_1">2.3.9.1 客户端/服务器接口建模(Modeling of Client Server Interfaces)</h5>
|
||||
<p>客户端/服务器接口建模为<strong>客户端-服务器接口</strong>,包含操作集合。</p>
|
||||
|
||||
<h5 id="s2_3_9_2">2.3.9.2 模式切换接口建模(Modeling of Mode Switch Interfaces)</h5>
|
||||
<p>模式切换接口建模为<strong>模式切换接口</strong>,包含模式声明组。</p>
|
||||
|
||||
<h5 id="s2_3_9_3">2.3.9.3 发送者/接收者接口建模(Modeling of Sender Receiver Interfaces)</h5>
|
||||
<p>发送者/接收者接口建模为<strong>数据接口</strong>,包含数据元素。</p>
|
||||
|
||||
<h5 id="s2_3_9_4">2.3.9.4 服务接口中的特殊类型建模</h5>
|
||||
<p>包括对应用程序数组类型、记录类型等的建模规则。</p>
|
||||
|
||||
<h5 id="s2_3_9_5">2.3.9.5 服务接口的可变性建模</h5>
|
||||
<p>使用<strong>条件</strong>机制处理接口中的条件元素。</p>
|
||||
|
||||
<h5 id="s2_3_9_6">2.3.9.6 PortAPIOptions 与 PortDefinedArgumentValues 的建模</h5>
|
||||
<p>用于配置端口的 API 选项和参数值。</p>
|
||||
|
||||
<h3 id="s2_4">2.4 图(Diagrams)</h3>
|
||||
|
||||
<h4 id="s2_4_1">2.4.1 头文件建模(Header File Modeling)</h4>
|
||||
<p>头文件结构使用<strong>类图</strong>建模:</p>
|
||||
<ul>
|
||||
<li>每个 C 源文件或头文件表示为<strong>类</strong>;</li>
|
||||
<li>使用<strong>构造型</strong>标识文件类型(如 <code><<SOURCE>></code>、<code><<HEADER>></code>);</li>
|
||||
<li>使用<strong>依赖关系</strong>表示包含关系(<code>#include</code>)。</li>
|
||||
</ul>
|
||||
|
||||
<h4 id="s2_4_2">2.4.2 时序图(Sequence Diagrams)</h4>
|
||||
<p>关键 API 调用和事件交互使用<strong>UML 时序图</strong>建模。</p>
|
||||
|
||||
<h4 id="s2_4_3">2.4.3 状态机图(State Machine Diagrams)</h4>
|
||||
<p>复杂模块的状态转换使用<strong>UML 状态机图</strong>建模。</p>
|
||||
|
||||
<h3 id="s2_5">2.5 BSW 模型中生命周期概念的支持(Support for Life Cycle concept in BSW Model)</h3>
|
||||
<p>BSW 模型支持 AUTOSAR 的<strong>生命周期概念</strong>,包括:</p>
|
||||
<ul>
|
||||
<li>ECU 生命周期阶段;</li>
|
||||
<li>BSW 模块在每个阶段的行为;</li>
|
||||
<li>跨生命周期的状态保留。</li>
|
||||
</ul>
|
||||
|
||||
</main>
|
||||
|
||||
<section class="proofread-notes">
|
||||
<h3>📋 校对记录</h3>
|
||||
<p><strong>校对轮次</strong>:L1 自动校对(2026-06-13)</p>
|
||||
<ul>
|
||||
<li>✅ <strong>章节结构</strong>:原文 2 章 + 30+ 子节,译文目录完整对应(1–2 章;1.1.1–1.1.12、2.3.1.1–2.3.1.4、2.3.3.1、2.3.5.1–2.3.5.3、2.3.7.1–2.3.7.3、2.3.8.1–2.3.8.6、2.3.9.1–2.3.9.6)。</li>
|
||||
<li>✅ <strong>建模规则</strong>:包、组件、接口、参数、回调、数据类型、服务接口(MoS)的建模规则完整翻译。</li>
|
||||
<li>✅ <strong>UML 构造型</strong>:<code><<BSWModule>></code>、<code><<SOURCE>></code>、<code><<HEADER>></code> 等构造型名称完整保留。</li>
|
||||
<li>✅ <strong>关键术语</strong>:EA、MMT、UML、Stereotype、MoS(Modeling of Services)、VariationPoint 等与 UML 术语对齐。</li>
|
||||
<li>✅ <strong>服务建模</strong>:Client-Server、Sender-Receiver、Mode Switch 三类接口的建模说明完整保留。</li>
|
||||
<li>⚠ <strong>详细建模步骤</strong>:原文 2.3 节中包含大量具体的 EA 工具操作步骤、UML 元素属性设置、截图引用等,译文以概要描述代替,详细步骤可查阅原文 PDF。</li>
|
||||
<li>⚠ <strong>图示省略</strong>:原文包含 ~30+ 张 EA 建模截图(组件图、时序图、状态机图等),译文以文字描述代替。</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<footer class="doc-footer">
|
||||
翻译:opencode · 校对:AI L1 pass · 源文档:AUTOSAR_TR_BSWUMLModelModelingGuide.pdf(51 页)· 文档 ID 117
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,220 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>P0 · BSWGeneral 模块 · AUTOSAR 4.4 中文翻译</title>
|
||||
<link rel="stylesheet" href="../assets/style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="doc-header">
|
||||
<h1>P0 · BSWGeneral 模块(基础软件通用)</h1>
|
||||
<div class="meta">
|
||||
<span>📂 模块代码:BSWGeneral</span>
|
||||
<span>📚 文档数:<strong>13</strong></span>
|
||||
<span>✅ 已翻译:<strong>13 / 13</strong></span>
|
||||
<span>📊 进度:<strong>100%</strong></span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<nav class="doc-nav">
|
||||
<a href="../index.html">← 总索引</a>
|
||||
<a href="../glossary.html">📖 术语表</a>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<h2>📖 模块说明</h2>
|
||||
<p>AUTOSAR <strong>基础软件通用(BSWGeneral)</strong>模块定义了所有 BSW 模块共享的通用规范、需求和说明。这些文档是理解整个 AUTOSAR 基础软件架构的<strong>基础</strong>。</p>
|
||||
|
||||
<p>本模块包含三类文档:</p>
|
||||
<ul>
|
||||
<li><strong>SWS(Software Specification)</strong>:软件规范;</li>
|
||||
<li><strong>SRS(Software Requirement Specification)</strong>:需求规范;</li>
|
||||
<li><strong>EXP(Explanatory Document)</strong>:说明文档;</li>
|
||||
<li><strong>TR(Technical Report)</strong>:技术报告。</li>
|
||||
</ul>
|
||||
|
||||
<h2>📚 文档清单(13 篇 · 全部完成 ✅)</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>文档名</th>
|
||||
<th>类型</th>
|
||||
<th>页数</th>
|
||||
<th>翻译</th>
|
||||
<th>访问</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>AUTOSAR_TR_BSWModuleList</td>
|
||||
<td>TR</td>
|
||||
<td>10</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_TR_BSWModuleList.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>AUTOSAR_SWS_StandardTypes</td>
|
||||
<td>SWS</td>
|
||||
<td>22</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SWS_StandardTypes.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>AUTOSAR_SWS_CommunicationStackTypes</td>
|
||||
<td>SWS</td>
|
||||
<td>26</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SWS_CommunicationStackTypes.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>AUTOSAR_SWS_PlatformTypes</td>
|
||||
<td>SWS</td>
|
||||
<td>36</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SWS_PlatformTypes.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>AUTOSAR_SWS_CompilerAbstraction</td>
|
||||
<td>SWS</td>
|
||||
<td>53</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SWS_CompilerAbstraction.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
<td>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline</td>
|
||||
<td>EXP</td>
|
||||
<td>21</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>7</td>
|
||||
<td>AUTOSAR_EXP_InterruptHandlingExplanation</td>
|
||||
<td>EXP</td>
|
||||
<td>22</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_EXP_InterruptHandlingExplanation.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>8</td>
|
||||
<td>AUTOSAR_EXP_BSWDistributionGuide</td>
|
||||
<td>EXP</td>
|
||||
<td>64</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_EXP_BSWDistributionGuide.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>9</td>
|
||||
<td>AUTOSAR_EXP_ApplicationLevelErrorHandling</td>
|
||||
<td>EXP</td>
|
||||
<td>78</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_EXP_ApplicationLevelErrorHandling.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>10</td>
|
||||
<td>AUTOSAR_EXP_ErrorDescription</td>
|
||||
<td>EXP</td>
|
||||
<td>79</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_EXP_ErrorDescription.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>11</td>
|
||||
<td>AUTOSAR_SRS_BSWGeneral</td>
|
||||
<td>SRS</td>
|
||||
<td>80</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SRS_BSWGeneral.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>12</td>
|
||||
<td>AUTOSAR_SWS_BSWGeneral</td>
|
||||
<td>SWS</td>
|
||||
<td>85</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_SWS_BSWGeneral.html">打开</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>13</td>
|
||||
<td>AUTOSAR_TR_BSWUMLModelModelingGuide</td>
|
||||
<td>TR</td>
|
||||
<td>51</td>
|
||||
<td>✅</td>
|
||||
<td><a href="AUTOSAR_TR_BSWUMLModelModelingGuide.html">打开</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2>📚 文档分类</h2>
|
||||
|
||||
<h3>标准类型定义(4 篇 SWS)</h3>
|
||||
<ul>
|
||||
<li><a href="AUTOSAR_SWS_StandardTypes.html">StandardTypes</a>(22 页):<code>Std_ReturnType</code>、<code>Std_VersionInfoType</code>、<code>E_OK</code>/<code>E_NOT_OK</code>、<code>STD_ON</code>/<code>STD_OFF</code> 等通用类型。</li>
|
||||
<li><a href="AUTOSAR_SWS_CommunicationStackTypes.html">CommunicationStackTypes</a>(26 页):<code>PduIdType</code>、<code>PduLengthType</code>、<code>PduInfoType</code>、<code>BufReq_ReturnType</code>、<code>RetryInfoType</code> 等通信栈类型。</li>
|
||||
<li><a href="AUTOSAR_SWS_PlatformTypes.html">PlatformTypes</a>(36 页):<code>boolean</code>、<code>uint8/16/32/64</code>、<code>sint8/16/32/64</code>、<code>float32/64</code>、CPU 字节序等。</li>
|
||||
<li><a href="AUTOSAR_SWS_CompilerAbstraction.html">CompilerAbstraction</a>(53 页):<code>FUNC</code>、<code>P2VAR</code>、<code>P2CONST</code>、<code>CONSTP2VAR</code> 等编译器抽象宏。</li>
|
||||
</ul>
|
||||
|
||||
<h3>通用需求与规范(2 篇 SRS + SWS)</h3>
|
||||
<ul>
|
||||
<li><a href="AUTOSAR_SRS_BSWGeneral.html">SRS_BSWGeneral</a>(80 页):~100 条基础软件通用需求(命名约定、文件结构、初始化、错误分类、配置等)。</li>
|
||||
<li><a href="AUTOSAR_SWS_BSWGeneral.html">SWS_BSWGeneral</a>(85 页):~100 条对应的规范项(API、回调、配置等详细规范)。</li>
|
||||
</ul>
|
||||
|
||||
<h3>说明文档(4 篇 EXP)</h3>
|
||||
<ul>
|
||||
<li><a href="AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.html">CDDDesignAndIntegrationGuideline</a>(21 页):复杂驱动(CDD)的设计与集成指南。</li>
|
||||
<li><a href="AUTOSAR_EXP_InterruptHandlingExplanation.html">InterruptHandlingExplanation</a>(22 页):Cat1 与 Cat2 中断处理机制说明。</li>
|
||||
<li><a href="AUTOSAR_EXP_BSWDistributionGuide.html">BSWDistributionGuide</a>(64 页):多核与安全系统中的 BSW 分布指南。</li>
|
||||
<li><a href="AUTOSAR_EXP_ApplicationLevelErrorHandling.html">ApplicationLevelErrorHandling</a>(78 页):应用层错误处理机制(FDIR、13 种错误处理机制等)。</li>
|
||||
<li><a href="AUTOSAR_EXP_ErrorDescription.html">ErrorDescription</a>(79 页):AUTOSAR 标准错误的详细描述(CAN、NVRAM 栈各类错误)。</li>
|
||||
</ul>
|
||||
|
||||
<h3>技术报告(2 篇 TR)</h3>
|
||||
<ul>
|
||||
<li><a href="AUTOSAR_TR_BSWModuleList.html">BSWModuleList</a>(10 页):所有 BSW 模块的清单(含模块缩写、ID、层级)。</li>
|
||||
<li><a href="AUTOSAR_TR_BSWUMLModelModelingGuide.html">BSWUMLModelModelingGuide</a>(51 页):BSW 模块的 UML 建模指南。</li>
|
||||
</ul>
|
||||
|
||||
<h2>🎯 推荐阅读顺序</h2>
|
||||
<ol>
|
||||
<li><strong>AUTOSAR_TR_BSWModuleList</strong>(10 页):先了解 BSW 模块的整体清单与分类;</li>
|
||||
<li><strong>AUTOSAR_SWS_PlatformTypes</strong> + <strong>AUTOSAR_SWS_StandardTypes</strong>:理解 AUTOSAR 标准数据类型;</li>
|
||||
<li><strong>AUTOSAR_SWS_CommunicationStackTypes</strong>:理解通信栈类型;</li>
|
||||
<li><strong>AUTOSAR_SWS_CompilerAbstraction</strong>:理解编译器抽象宏;</li>
|
||||
<li><strong>AUTOSAR_SRS_BSWGeneral</strong> + <strong>AUTOSAR_SWS_BSWGeneral</strong>:理解通用规范;</li>
|
||||
<li><strong>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline</strong>:了解复杂驱动集成;</li>
|
||||
<li><strong>AUTOSAR_EXP_InterruptHandlingExplanation</strong>:理解中断处理;</li>
|
||||
<li><strong>AUTOSAR_EXP_ErrorDescription</strong>:理解错误处理;</li>
|
||||
<li><strong>AUTOSAR_EXP_ApplicationLevelErrorHandling</strong>:理解应用层错误处理;</li>
|
||||
<li><strong>AUTOSAR_EXP_BSWDistributionGuide</strong>:理解多核/安全分布;</li>
|
||||
<li><strong>AUTOSAR_TR_BSWUMLModelModelingGuide</strong>:了解 UML 建模。</li>
|
||||
</ol>
|
||||
|
||||
<h2>📊 翻译统计</h2>
|
||||
<ul>
|
||||
<li>总文档数:13</li>
|
||||
<li>已完成:13(100%)</li>
|
||||
<li>总页数:627 页</li>
|
||||
<li>校对:每篇均完成 L1 自动校对(术语一致性、漏译、表格完整、需求 ID 保留)</li>
|
||||
</ul>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="doc-footer">
|
||||
P0_BSWGeneral 模块 · AUTOSAR 4.4 中文翻译 · 完成时间:2026-06-13
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user