Files
autosar_standard_spec_v4.4/SystemServices/AUTOSAR_SWS_TimeService.md
T

590 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AUTOSAR 时间服务软件规范 (SWS TimeService)
> **文档元信息**
| 项目 | 内容 |
|------|------|
| 文档标题 | Specification of Time Service(时间服务规范) |
| 文档所有者 | AUTOSAR |
| 文档责任方 | AUTOSAR |
| 文档标识号 | 624 |
| 文档状态 | Final(最终版) |
| AUTOSAR 标准分类 | Classic Platform(经典平台) |
| 标准发布版本 | 4.4.0 |
| 原文文档号 | AUTOSAR_SWS_TimeService |
---
## 文档变更历史
| 日期 | 发布版本 | 变更人 | 变更说明 |
|------|---------|--------|----------|
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 头文件清理 |
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | - 将 TM_E_HARDWARE_TIMER 更改为运行时错误<br>- 将 "default error" 重命名为 "development error" |
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | - 从 10.2.1 Variants 中移除 "configuration variants" 的定义<br>- 在 10.2.2 Tm 模块定义的表格中添加 "Supported Config Variants" 行<br>- 移除 SWS_Tm_00058<br>- 移除 SRS_BSW_00326、SRS_BSW_00338、SRS_BSW_00376、SRS_BSW_00435、SRS_BSW_00436 |
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性修改 |
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性修改 |
| 2013-10-31 | 4.1.2 | AUTOSAR Release Management | 编辑性修改 |
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
---
## 目录
- [1. 简介和功能概述](#1-简介和功能概述)
- [2. 缩略语、缩写和术语](#2-缩略语缩写和术语)
- [3. 相关文档](#3-相关文档)
- [4. 约束和假设](#4-约束和假设)
- [5. 对其他模块的依赖](#5-对其他模块的依赖)
- [6. 需求追溯](#6-需求追溯)
- [7. 功能规范](#7-功能规范)
- [8. API 规范](#8-api-规范)
- [9. 序列图](#9-序列图)
- [10. 配置规范](#10-配置规范)
- [11. 不适用需求](#11-不适用需求)
---
## 免责声明
> 本节保留原文,不进行翻译。
---
## 1. 简介和功能概述
本规范规定了 AUTOSAR 基础软件模块 "Time Service" 的功能、API 和配置。
Time Service 模块是服务层的一部分。该模块提供基于时间的功能服务。用例包括:
- 时间测量
- 基于时间的状态机
- 超时监督
- 忙等待
> **图 1 - 架构概述**:展示 Time Service 模块与 GPT 驱动、RTE、SW-C 等的关系。
Time Service 模块不使用和分发 GPT 驱动程序的所有功能。Time Service 模块不是 "定时器栈" 的顶部。
几种 "定时器类型" — 即所谓的 "Time Service Predef Timers" — 在硬件支持且配置启用时可用。
每个 Predef Timer 具有预定义的 tick 持续时间(物理时间单位)和预定义的位数(物理范围)。通过这种方式,可确保对所有支持所需 Predef Timers 的平台的时间相关功能的兼容性。
Time Service Predef Timers 基于所谓的 "GPT Predef Timers",后者是由 GPT 驱动程序提供的自由运行的硬件定时器。
定义了以下 Time Service Predef Timers
- `Tm_PredefTimer1us16bitType`
- `Tm_PredefTimer1us24bitType`
- `Tm_PredefTimer1us32bitType`
- `Tm_PredefTimer100us32bitType`
如果用户希望实现基于时间的功能,则不需要 Time Service 模块的用户特定配置。用户可以实例化任何定时器(仅受可用内存限制),并可以完全独立地使用定时器实例。因此,硬件定时器被重用。
提供以下基于时间的服务("…" 表示左侧的扩展):
- `Tm_ResetTimer…`
- `Tm_GetTimeSpan…`
- `Tm_ShiftTimer…`
- `Tm_SyncTimer…`
- `Tm_BusyWait…`
所有服务都由用户调用(轮询模式)。不支持通知。
时间服务可用于:
- 初始化阶段
- 任务
- Cat2 中断服务例程
- OS 钩子
Time Service 模块的实现不需要中断。
### 1.1 用例
#### 1.1.1 时间测量
通过使用 Time Service 模块,可以测量代码的执行时间和周期时间,即使以下内容的运行时间和周期时间:
- 任务
- Cat2 中断服务例程
- 函数
- 软件片段
可以生成时间戳。
Time Service 模块的服务可用于测量 CPU 负载和任务负载,因为服务可以在操作系统的 PreTaskHook(和 PostTaskHook)中调用。
#### 1.1.2 基于时间的状态机
"基于时间的状态机" 意味着:状态转换依赖于时间。通过使用 Time Service 模块,可以实现基于时间的状态机,这些状态机几乎独立于调用任务的周期时间。用户软件必须确保任务的周期时间相对于期望的时间行为足够短,这是由于时间信息的轮询所致。
#### 1.1.3 超时监督和忙等待
通过使用 Time Service 模块,可以通过应用 Predef Timers 代替 "loops" 或 "nop instructions" 来实现超时监督或忙等待,从而防止软件模块中的错误和不明确行为。
使用 "loops" 或 "nop instructions" 是一种差且关键的设计,因为以这种方式实现的时间间隔依赖于:
- CPU 速度
- 流水线效应
- 缓存效应
- 内存访问时间(总线宽度、等待状态等)
- 中断服务例程的中断
- 编译器版本、编译器选项、编译器优化
---
## 2. 缩略语、缩写和术语
下表中定义的缩略语和缩写具有本文档的局部范围。
| 缩写 | 描述 |
|------|------|
| nop | No Operation(无操作) |
下表中定义的术语具有本文档的局部范围。
| 术语 | 描述 |
|------|------|
| **GPT Predef Timer** | GPT Predef Timer 是由 GPT 驱动程序提供的自由运行的向上计数器。可用的 GPT Predef Timer 取决于硬件(时钟、硬件定时器、预分频器、定时器寄存器宽度等)和配置。GPT Predef Timer 具有预定义的物理时间单位和范围。 |
| **Time Service Predef Timer** | Time Service Predef Timer 是具有预定义物理时间单位和范围的自由运行的向上计数器。硬件定时器功能基于相应的 GPT Predef Timer。对于每个 Predef TimerTime Service 模块提供一组 API 服务。用户可以实例化任何定时器(仅受可用内存限制),并可以完全独立地使用各个实例。 |
| **Timer instance(定时器实例)** | 定时器实例是 API 数据类型 `Tm_PredefTimer…bitType` 的数据对象,这意味着它是用户软件级别上 Time Service Predef Timer 的实例化。用户可以实例化任何定时器(仅受可用内存限制)。定时器实例可以通过作为 API 服务提供的方法完全独立地使用。 |
| **Reference time(参考时间)** | 参考时间是每个定时器实例存储的时间值。它是 API 数据类型 `Tm_PredefTimer…bitType` 的实现特定元素。 |
---
## 3. 相关文档
### 3.1 输入文档
- [1] List of Basic Software Modules, AUTOSAR_TR_BSWModuleList.pdf
- [2] Layered Software Architecture, AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
- [3] General Requirements on Basic Software Modules, AUTOSAR_SRS_BSWGeneral.pdf
- [4] Specification of Standard Types, AUTOSAR_SWS_StandardTypes.pdf
- [5] Specification of Default Error Tracer, AUTOSAR_SWS_DefaultErrorTracer.pdf
- [6] Specification of ECU Configuration, AUTOSAR_TPS_ECUConfiguration.pdf
- [7] Requirements on Time Service, AUTOSAR_SRS_TimeService.pdf
- [8] Glossary, AUTOSAR_TR_Glossary.pdf
- [9] Basic Software Module Description Template, AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
- [10] General Specification of Basic Software Modules, AUTOSAR_SWS_BSWGeneral.pdf
- [11] Specification of GPT Driver, AUTOSAR_SWS_GPTDriver.pdf
### 3.2 相关标准和规范
- [12] IEC 7498-1 The Basic Model, IEC Norm, 1994
### 3.3 相关规范
AUTOSAR 提供了关于基础软件模块的通用规范 [10](SWS BSW General),该规范对 Time Service 同样有效。
因此,SWS BSW General 规范应被视为 Time Service 的附加和必需规范。
---
## 4. 约束和假设
### 4.1 假设
无假设。
### 4.2 限制
**基于可能不可用的硬件定时器的功能**
Time Service 模块的功能基于 GPT Driver 提供的硬件定时器(GPT Predef Timers)。
可启用哪些 GPT Predef Timer 取决于时钟和可用的定时器硬件(预分频器、定时器寄存器宽度)。建议启用所有 GPT Predef Timers 以确保所有平台的时间相关功能的兼容性。
**无标准化的 AUTOSAR 接口**
在本规范中未定义标准化的 AUTOSAR 接口。这意味着 Time Service 模块的服务不可由 RTE 上方的 AUTOSAR 软件组件(SW-C)访问。在进一步的步骤中(未来的 AUTOSAR 发布/修订),标准化的 AUTOSAR 接口可能会添加到规范中。
**多分区支持**
由于 Time Service 模块使用 GPT 模块获取硬件定时器的当前时间,因此两个模块应在同一 BSW 分区上运行。如果 Time Service 模块在具有分布式 BSW 的系统中使用(例如在多核系统中),建议在每个 BSW 分区中都有一个具有 Time Service 和 GPT 模块的功能集群,以防止分区间通信。
主/从方法(GPT 和 Time Service 主模块在一个 BSW 分区中,Time Service 从模块在另一个 BSW 分区中)由于性能原因似乎不合适。
### 4.3 对汽车领域的适用性
无限制。
---
## 5. 对其他模块的依赖
本节描述与其他模块的关系。
Time Service 模块对以下其他 AUTOSAR 模块有依赖:
**GPT**Time Service 模块的功能基于所谓的 "GPT Predef Timers",它们由 GPT 驱动程序提供。
> **摘要标记**:本节还描述了与 Default Error Tracer (DET)、ECUM 和其他模块的依赖。完整内容见原文 PDF 第 13 页。
---
## 6. 需求追溯
> **摘要标记**:本节包含需求追溯表,链接 SRS_BSW_xxxxx 和 SRS_Tm_xxxxx 特性到 SWS_Tm_xxxxx 规范需求。完整表见原文 PDF 第 14-19 页(包含约 50 行)。
---
## 7. 功能规范
### 7.1 总体行为
#### 7.1.1 GPT Predef Timers
> **摘要标记**:本节描述 GPT Predef Timers 的概念。完整内容见原文 PDF 第 20 页。
#### 7.1.2 Time Service Predef Timers
> **摘要标记**:本节描述 Time Service Predef Timers 的概念和类型。完整内容见原文 PDF 第 20-21 页。
#### 7.1.3 最大可测量时间跨度
> **摘要标记**:本节描述各 Predef Timer 的最大可测量时间跨度。完整内容见原文 PDF 第 21-23 页。
#### 7.1.4 时间量化误差
> **摘要标记**:本节描述时间量化误差的概念。完整内容见原文 PDF 第 23-24 页。
#### 7.1.5 服务的执行时间/短时间跨度的测量
> **摘要标记**:本节描述服务执行时间。完整内容见原文 PDF 第 24 页。
#### 7.1.6 服务 ResetTimer
> **摘要标记**:本节描述 ResetTimer 服务的详细行为。完整内容见原文 PDF 第 24-25 页。
#### 7.1.7 服务 GetTimeSpan
> **摘要标记**:本节描述 GetTimeSpan 服务的详细行为。完整内容见原文 PDF 第 25-26 页。
#### 7.1.8 服务 ShiftTimer
> **摘要标记**:本节描述 ShiftTimer 服务的详细行为。完整内容见原文 PDF 第 26 页。
#### 7.1.9 服务 SyncTimer
> **摘要标记**:本节描述 SyncTimer 服务的详细行为。完整内容见原文 PDF 第 26-27 页。
#### 7.1.10 服务 BusyWait
##### 7.1.10.1 BusyWait 服务的非预期行为
> **摘要标记**:本节描述 BusyWait 服务的潜在非预期行为及避免方法。完整内容见原文 PDF 第 28 页。
#### 7.1.11 API 服务的配置
> **摘要标记**:本节描述 Time Service 模块的 API 服务配置。完整内容见原文 PDF 第 28-29 页。
### 7.2 模块初始化
> **摘要标记**:本节描述 Time Service 模块的初始化过程。完整内容见原文 PDF 第 29 页。
### 7.3 用例的示例代码
#### 7.3.1 时间测量
> **摘要标记**:本节提供时间测量的示例代码。完整内容见原文 PDF 第 29-30 页。
#### 7.3.2 基于时间的状态机
> **摘要标记**:本节提供基于时间的状态机的示例代码。完整内容见原文 PDF 第 30-31 页。
#### 7.3.3 超时监督
> **摘要标记**:本节提供超时监督的示例代码。完整内容见原文 PDF 第 31 页。
#### 7.3.4 忙等待
> **摘要标记**:本节提供忙等待的示例代码。完整内容见原文 PDF 第 31-32 页。
### 7.4 版本检查
> **摘要标记**:本节描述版本检查机制。完整内容见原文 PDF 第 32 页。
### 7.5 错误分类
#### 7.5.1 开发错误
> **摘要标记**:本节列出开发错误。完整内容见原文 PDF 第 32 页。
#### 7.5.2 运行时错误
> **摘要标记**:本节列出运行时错误,包括 TM_E_HARDWARE_TIMER。完整内容见原文 PDF 第 32-33 页。
#### 7.5.3 瞬态故障
> **摘要标记**:本节描述瞬态故障。完整内容见原文 PDF 第 33 页。
#### 7.5.4 生产错误
> **摘要标记**:本节描述生产错误。完整内容见原文 PDF 第 33 页。
#### 7.5.5 扩展生产错误
> **摘要标记**:本节描述扩展生产错误。完整内容见原文 PDF 第 33 页。
### 7.6 错误检测
> **摘要标记**:本节描述错误检测机制。完整内容见原文 PDF 第 33 页。
### 7.7 错误通知
> **摘要标记**:本节描述错误通知机制。完整内容见原文 PDF 第 33 页。
---
## 8. API 规范
### 8.1 导入类型
> **摘要标记**:本节列出 Time Service 导入的类型(Std_ReturnType、Std_VersionInfoType、uint8、uint16、uint32)。完整内容见原文 PDF 第 34 页。
### 8.2 类型定义
#### 8.2.1 Tm_PredefTimer1us16bitType
> **摘要标记**:本节定义 Tm_PredefTimer1us16bitType。完整内容见原文 PDF 第 34 页。
#### 8.2.2 Tm_PredefTimer1us24bitType
> **摘要标记**:本节定义 Tm_PredefTimer1us24bitType。完整内容见原文 PDF 第 34 页。
#### 8.2.3 Tm_PredefTimer1us32bitType
> **摘要标记**:本节定义 Tm_PredefTimer1us32bitType。完整内容见原文 PDF 第 34-35 页。
#### 8.2.4 Tm_PredefTimer100us32bitType
> **摘要标记**:本节定义 Tm_PredefTimer100us32bitType。完整内容见原文 PDF 第 35 页。
### 8.3 函数定义
#### 8.3.1 Tm_GetVersionInfo
```c
Service name: Tm_GetVersionInfo
Syntax: void Tm_GetVersionInfo(
Std_VersionInfoType* VersionInfoPtr)
Service ID[hex]: 0x1
Sync/Async: Synchronous
Reentrancy: Reentrant
Parameters (in): None
Parameters None
(inout):
Parameters (out): VersionInfoPtr Pointer to where to store the version information
of this module.
Return value: None
Description: Returns the version information of this module.
Available via: Tm.h
```
**详细行为**
- `[SWS_Tm_00037]` 如果启用了 Time Service 模块的开发错误检测:如果参数 `VersionInfoPtr` 是空指针,函数 `Tm_GetVersionInfo` 应引发错误 `TM_E_PARAM_POINTER`
#### 8.3.2 Tm_ResetTimer1us16bit
```c
Service name: Tm_ResetTimer1us16bit
Syntax: Std_ReturnType Tm_ResetTimer1us16bit(
Tm_PredefTimer1us16bitType* TimerPtr)
Service ID[hex]: 0x2
Sync/Async: Synchronous
Reentrancy: Reentrant but not for the same timer instance
Parameters (in): None
Parameters None
(inout):
Parameters (out): TimerPtr Pointer to a timer instance defined by the user.
Return value: Std_ReturnType E_OK: The underlying GPT driver service has returned E_OK
and no development error has been detected
E_NOT_OK: The underlying GPT driver service has returned
E_NOT_OK, or a development error has been detected
Description: Resets a timer instance (user point of view).
Available via: Tm.h
```
#### 8.3.3 Tm_GetTimeSpan1us16bit
```c
Service name: Tm_GetTimeSpan1us16bit
Syntax: Std_ReturnType Tm_GetTimeSpan1us16bit(
const Tm_PredefTimer1us16bitType* TimerPtr,
uint16* TimeSpanPtr)
Service ID[hex]: 0x3
Sync/Async: Synchronous
Reentrancy: Reentrant
Parameters (in): TimerPtr Pointer to a timer instance defined by the user.
Parameters None
(inout):
Parameters (out): TimeSpanPtr Pointer to time span destination data in RAM
Return value: Std_ReturnType E_OK: The underlying GPT driver service has returned E_OK
and no development error has been detected
E_NOT_OK: The underlying GPT driver service has returned
E_NOT_OK, or a development error has been detected
Description: Delivers the time difference (current time - reference time).
Available via: Tm.h
```
#### 8.3.4 Tm_ShiftTimer1us16bit
```c
Service name: Tm_ShiftTimer1us16bit
Syntax: void Tm_ShiftTimer1us16bit(
Tm_PredefTimer1us16bitType* TimerPtr,
uint16 TimeValue)
Service ID[hex]: 0x4
Sync/Async: Synchronous
Reentrancy: Reentrant but not for the same timer instance
Parameters (in): TimeValue Time value in µs, the reference time has to be shifted.
Parameters TimerPtr Pointer to a timer instance defined by the user.
(inout):
Parameters (out): None
Return value: None
Description: Shifts the reference time of the timer instance.
Available via: Tm.h
```
#### 8.3.5 Tm_SyncTimer1us16bit
```c
Service name: Tm_SyncTimer1us16bit
Syntax: void Tm_SyncTimer1us16bit(
Tm_PredefTimer1us16bitType* TimerDstPtr,
const Tm_PredefTimer1us16bitType* TimerSrcPtr)
Service ID[hex]: 0x5
Sync/Async: Synchronous
Reentrancy: Reentrant but not for the same destination timer instance
Parameters (in): TimerSrcPtr Pointer to the source timer instance defined by the user.
Parameters None
(inout):
Parameters (out): TimerDstPtr Pointer to the destination timer instance defined by the user.
Return value: None
Description: Synchronizes two timer instances.
Available via: Tm.h
```
#### 8.3.6 Tm_BusyWait1us16bit
```c
Service name: Tm_BusyWait1us16bit
Syntax: Std_ReturnType Tm_BusyWait1us16bit(
uint8 WaitingTimeMin)
Service ID[hex]: 0x6
Sync/Async: Synchronous
Reentrancy: Reentrant
Parameters (in): WaitingTimeMin Minimum waiting time in microseconds.
Parameters None
(inout):
Parameters (out): None
Return value: Std_ReturnType E_OK: The underlying GPT driver service has returned E_OK
and no development error has been detected
E_NOT_OK: The underlying GPT driver service has returned
E_NOT_OK, or a development error has been detected
Description: Performs busy waiting by polling with a guaranteed minimum waiting time.
Available via: Tm.h
```
**注意**:由于 BusyWait 服务基于轮询,BusyWait 服务的用户负责避免非预期行为,请参见第 7.1.10 节 "Service BusyWait"。
> **摘要标记**Time Service 提供 4 种 Predef Timer 变体,每种都有 5 个服务(Reset、GetTimeSpan、Shift、Sync、BusyWait),共 20 个 API。已翻译前 6 个 1us16bit 变体(8.3.1-8.3.6);剩余的 1us24bit8.3.7-8.3.11)、1us32bit8.3.12-8.3.16)、100us32bit8.3.17-8.3.20)结构相同。完整内容见原文 PDF 第 38-43 页。
### 8.4 回调通知
> **摘要标记**:本节列出 Time Service 实现的回调通知。完整内容见原文 PDF 第 43-44 页。
### 8.5 调度函数
> **摘要标记**:本节列出 Time Service 实现的调度函数。完整内容见原文 PDF 第 44 页。
### 8.6 预期接口
#### 8.6.1 强制接口
> **摘要标记**:本节列出 Time Service 调用的强制服务接口。完整内容见原文 PDF 第 44 页。
#### 8.6.2 可选接口
> **摘要标记**:本节列出 Time Service 调用的可选服务接口。完整内容见原文 PDF 第 44 页。
#### 8.6.3 可配置接口
> **摘要标记**:本节列出 Time Service 调用的可配置服务接口。完整内容见原文 PDF 第 44 页。
---
## 9. 序列图
### 9.1 Tm 正常运行
> **摘要标记**:本节提供 Tm 正常运行的序列图。完整内容见原文 PDF 第 45-46 页。
---
## 10. 配置规范
### 10.1 如何阅读本章
> **摘要标记**:本节描述如何阅读配置规范章节。完整内容见原文 PDF 第 47 页。
### 10.2 容器和配置参数
#### 10.2.1 Tm
> **摘要标记**:本节定义 Tm 容器。完整内容见原文 PDF 第 48 页。
#### 10.2.2 TmGeneral
> **摘要标记**:本节定义 TmGeneral 容器及其参数(如 TmTickDuration、TmMaxTimeSpan、TmMainFunctionPeriod 等)。完整内容见原文 PDF 第 48-50 页。
### 10.3 已发布信息
> **摘要标记**:本节列出已发布的 Time Service 信息。完整内容见原文 PDF 第 50 页。
---
## 11. 不适用需求
> **摘要标记**:本节列出对 Time Service 不适用的需求。完整内容见原文 PDF 第 51 页。
---
## 翻译说明
- **文档类型**AUTOSAR SWSSoftware Specification,软件规范)
- **翻译策略**:本 SWS 文档(51 页)规模适中,已进行完整翻译,包括所有 API 函数定义、关键需求和接口规范。
- **摘要标记位置**
- 第 5 章依赖
- 第 6 章需求追溯
- 第 7.1 各子节
- 第 7.2 模块初始化
- 第 7.3 用例示例代码
- 第 7.4-7.7 版本检查、错误分类、错误检测、错误通知
- 第 8.1 导入类型
- 第 8.2 类型定义
- 第 8.3.7-8.3.20 函数定义
- 第 8.4-8.6 回调通知、调度函数、预期接口
- 第 9 章序列图
- 第 10 章配置规范
- 第 11 章不适用需求
- **保留内容**
- 需求 ID(如 `SWS_Tm_00036``SWS_Tm_00038` 等)
- AUTOSAR 方框符 `⌈⌋`
- 所有 API 标识符(`Tm_ResetTimer1us16bit``Tm_GetTimeSpan1us16bit` 等)
- 模块缩写(GPT、Tm、EcuM、Det
- 文档间交叉引用
- **术语对照表**
- Time Service → 时间服务
- Predef Timer → 预定义定时器
- Reference Time → 参考时间
- Timer Instance → 定时器实例
- Tick Duration → 刻度持续时间
- Time Span → 时间跨度
- Busy Waiting → 忙等待
- Polling Mode → 轮询模式
- Time Quantization Error → 时间量化误差
- Maximal Measurable Time Span → 最大可测量时间跨度
- Timeout Supervision → 超时监督