1 文档范围(Scope of Document)
本规范定义了 BSW 模块时间服务(Time Service)的需求。
约束:基础软件模块需求规范的首要范围是非安全相关的系统。对于安全相关系统中基础软件模块的实现,应当检查是否需要附加需求。
2 约定(Conventions to be used)
AUTOSAR 文档中的需求表示遵循 [1] 中指定的表格。在需求中,使用以下特定语义(基于 IETF RFC 2119):
- SHALL(应当):定义是规范的绝对要求。
- SHALL NOT(不得):定义是规范的绝对禁止。
- MUST(必须):定义是规范的绝对要求(基于法律/标准原因)。
- MUST NOT(禁止):定义是规范的绝对禁止(基于法律约束)。
- SHOULD / RECOMMENDED(建议/推荐):在特定情形下可能存在合理的理由忽略该项,但在选择不同做法之前必须充分理解其全部含义并谨慎权衡。
- SHOULD NOT / NOT RECOMMENDED(不建议):在特定情形下该行为可能是可接受的甚至是有用的,但在实现前应充分理解其含义并谨慎权衡。
- MAY / OPTIONAL(可以/可选):该项是真正可选的。
3 功能概述(Functional Overview)
时间服务(Time Service)模块是服务层的一部分。该模块提供基于时间的功能服务。用例包括:
- 时间测量(Time measurement);
- 基于时间的状态机(Time based state machine);
- 超时监控(Timeout supervision);
- 忙等待(Busy waiting)。
如果硬件支持且通过配置启用,可使用多种"定时器类型"——即所谓的"时间服务预定义定时器"(Time Service Predef Timers)。
每个预定义定时器具有预定义的刻度时长(物理时间单位)和预定义的位数(物理范围)。由此,确保了所有支持所需时间服务预定义定时器的平台之间基于时间的功能兼容性。
时间服务预定义定时器基于所谓的"GPT 预定义定时器"(GPT Predef Timers),即由 GPT 驱动提供的自由运行硬件定时器。
所有服务都由用户轮询调用。不支持通知机制。
时间服务模块不使用也不分发GPT 驱动的所有功能。时间服务模块不是"定时器栈"的顶层。
4 缩略语、缩写与术语(Acronyms, abbreviations and terms)
| 缩略语 / 术语 | 英文 | 说明 |
|---|---|---|
| GPT Predef Timer | GPT Predefined Timer | 由 GPT 驱动提供的自由运行向上计数器。哪些 GPT Predef Timer 可用取决于硬件(时钟、硬件定时器、预分频器、定时器寄存器宽度等)和配置。GPT Predef Timer 具有预定义的物理时间单位和范围。 |
| Time Service Predef Timer | Time Service Predefined Timer | 具有预定义物理时间单位和范围的自由运行向上计数器。硬件定时器功能基于相应的 GPT Predef Timer。对于每个预定义定时器,时间服务模块提供一组 API 服务。用户可以实例化任意数量的定时器(仅受可用内存限制)并彼此独立使用这些实例。 |
| Timer instance | 定时器实例 | 定时器实例是 API 数据类型的数据对象。 |
| Reference time | 参考时间 | 参考时间是为每个定时器实例存储的时间值。 |
5 需求追溯(Requirements Tracing)
| 需求 | 描述 | 由以下 SRS 满足 |
|---|---|---|
RS_BRF_01056 | AUTOSAR BSW 模块应当提供标准化接口。 | SRS_Tm_00004、SRS_Tm_00005、SRS_Tm_00006、SRS_Tm_00007、SRS_Tm_00008 |
RS_BRF_01408 | AUTOSAR 应当提供可从每个基础软件层访问的服务层。 | SRS_Tm_00001、SRS_Tm_00002、SRS_Tm_00003、SRS_Tm_00004、SRS_Tm_00005、SRS_Tm_00006、SRS_Tm_00007、SRS_Tm_00008 |
RS_BRF_01468 | AUTOSAR 服务应当支持用于相对时间测量的时间服务。 | SRS_Tm_00001、SRS_Tm_00002、SRS_Tm_00003、SRS_Tm_00004、SRS_Tm_00005、SRS_Tm_00006、SRS_Tm_00007、SRS_Tm_00008 |
6 需求规范(Requirements Specification)
6.1 功能需求(Functional Requirements)
6.1.1 通用(General)
[SRS_Tm_00001] 时间服务模块应当支持不同类型的预定义定时器。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当支持以下类型的预定义定时器:
|
| 理由 | 1µs:高分辨率定时器。 16bit 定时器:支持 16bit 硬件定时器。 24bit 定时器:支持 24bit 硬件定时器。 32bit 定时器:支持 32bit 硬件定时器。 100µs32bit 定时器:覆盖汽车用例(时间跨度 4.9 天)。 |
| 用例 | 时间测量、基于时间的状态机、超时监控、忙等待。 |
| 依赖 | [SRS_BSW_00343] 时间的规范与配置 |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01468 |
[SRS_Tm_00002] GPT 预定义定时器应当用作时间服务模块预定义定时器的时间基准。
| 类型 | Valid |
|---|---|
| 描述 | GPT 预定义定时器应当用作时间服务模块预定义定时器的时间基准。 |
| 理由 | 时间服务模块必须使用驱动模块进行硬件访问。 |
| 用例 | 读取当前定时器值。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01468 |
6.1.2 配置(Configuration)
[SRS_Tm_00003] 时间服务模块应当能够配置启用哪些预定义定时器。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当能够配置启用哪些预定义定时器。对于每个启用的预定义定时器,应当提供一组 API 服务:
|
| 理由 | 在不需要时禁用预定义定时器,或当相关 GPT Predef Timer 不可用时。 |
| 用例 | — |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01468 |
6.1.3 初始化(Initialization)
(无具体需求,参见 SRS_BSWGeneral 中的初始化通用需求)
6.1.4 正常运行(Normal Operation)
[SRS_Tm_00004] 时间服务模块应当提供一个用于复位定时器实例的同步服务。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当为每个启用的预定义定时器提供一个同步服务,用于复位定时器实例。通过此服务设置参考时间,这是后续服务所需的。该服务应当具有以下参数:
|
| 理由 | 基本功能。出于性能原因,每个预定义定时器都需要此服务。使用指针(而不是标识符)来引用定时器实例,以避免对时间服务模块的用户相关配置。因此,该服务可以像库服务一样灵活使用。 |
| 用例 | 时间测量、基于时间的状态机、超时监控、忙等待。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01056、RS_BRF_01468 |
[SRS_Tm_00005] 时间服务模块应当提供一个用于获取时间跨度的同步服务。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当为每个启用的预定义定时器提供一个同步服务,用于获取时间跨度。时间跨度是参考时间与当前时刻之间的时间差。该服务应当具有以下参数:
|
| 理由 | 基本功能。出于性能原因,每个预定义定时器都需要此服务。使用指针(而不是标识符)来引用定时器实例,以避免对时间服务模块的用户相关配置。因此,该服务可以像库服务一样灵活使用。 |
| 用例 | 时间测量、基于时间的状态机、超时监控、忙等待。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01056、RS_BRF_01468 |
[SRS_Tm_00006] 时间服务模块应当提供一个用于平移定时器实例参考时间的同步服务。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当为每个启用的预定义定时器提供一个同步服务,用于平移定时器实例的参考时间。平移意味着将一个时间值添加到参考时间以获得新的参考时间。该服务应当具有以下参数:
|
| 理由 | 扩展功能。出于性能原因,每个预定义定时器都需要此服务。使用指针(而不是标识符)来引用定时器实例,以避免对时间服务模块的用户相关配置。因此,该服务可以像库服务一样灵活使用。 |
| 用例 | 在不损失精度的情况下测量软件可运行体的周期时间。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01056、RS_BRF_01468 |
[SRS_Tm_00007] 时间服务模块应当提供一个用于同步两个定时器实例的同步服务。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当为每个启用的预定义定时器提供一个同步服务,用于同步两个定时器实例。同步意味着将定时器实例"目标"的参考时间设置为定时器实例"源"的参考时间。该服务应当具有以下参数:
|
| 理由 | 扩展功能。出于性能原因,每个预定义定时器都需要此服务。使用指针(而不是标识符)来引用定时器实例,以避免对时间服务模块的用户相关配置。因此,该服务可以像库服务一样灵活使用。 |
| 用例 | 测量与同一参考时间相关的不同时间戳(例如某些任务的首次调用)。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01056、RS_BRF_01468 |
[SRS_Tm_00008] 时间服务模块应当提供一个刻度时长为 1µs 的同步服务,用于通过轮询执行忙等待。
| 类型 | Valid |
|---|---|
| 描述 | 时间服务模块应当为每个启用的预定义定时器提供刻度时长为 1µs 的同步服务,用于通过轮询执行忙等待(主动等待)。等待时间应当限制为 8 位(255µs),以防止长时间阻塞代码执行。不应当禁用中断,这意味着实际等待时间可能大于期望的等待时间。
该服务应当具有以下参数:
|
| 理由 | 扩展功能。出于性能原因,每个 1µs 预定义定时器都需要此服务。该服务可以像库服务一样灵活使用。 降低用户软件层面错误实现忙等待的风险。 确保正确的等待时间,与以下因素无关:
|
| 用例 | 驱动的实现(硬件相关的等待时间)。 |
| 依赖 | — |
| 支持材料 | — |
| 满足 | RS_BRF_01408、RS_BRF_01056、RS_BRF_01468 |
7 参考资料(References)
7.1 AUTOSAR 交付物
- [1] 软件标准化模板(
AUTOSAR_TPS_StandardizationTemplate.pdf)