AUTOSAR进阶图解==>AUTOSAR_SRS_FreeRunningTimer
AUTOSAR 自由运行定时器(SWFRT)详解
目录
- 1. 概述
- 1.1 文档范围
- 1.2 约束条件
- 2. 自由运行定时器架构
- 2.1 架构图解析
- 2.2 组件职责说明
- 3. 自由运行定时器状态管理
- 3.1 状态图解析
- 3.2 状态转换说明
- 4. 自由运行定时器交互流程
- 4.1 序列图解析
- 4.2 流程详解
- 5. 总结与应用
1. 概述
1.1 文档范围
本文档定义了**软件自由运行定时器(SWFRT)**的功能需求。操作系统(OS)软件规范应满足这些需求。
自由运行定时器提供了一种机制,使应用软件能够获得精确的时间测量功能。它是AUTOSAR标准中的一个重要组件,为各种应用场景提供时间基准和测量能力。
1.2 约束条件
特定微控制器的硬件可能无法支持自由运行定时器功能,特别是在以下情况下:
- 硬件定时器不可用(或用于具有不兼容需求的其他功能)
- 硬件定时器可用,但使用会导致过高的中断负载
- 硬件定时器可用,但不是独立的。依赖关系不合适
- 硬件定时器不满足范围/分辨率/间隔要求
- 预分频器不可用或不足够
在此模块中,配置性及其与其他模块的依赖关系是最关键的部分,因为很多时候,用于自由运行定时器的定时器应在模块之间共享。实现SW-FRT的模块应该引入有关定时器/时钟的任何其他工具的设置,而不是定义设置。
2. 自由运行定时器架构
2.1 架构图解析
2.2 组件职责说明
架构图展示了AUTOSAR自由运行定时器(SWFRT)在AUTOSAR软件栈中的位置和交互关系。以下是对图中各个组件的详细解释:
1. 应用层组件:
应用软件组件 (SWC):
- 功能:使用自由运行定时器服务进行时间测量
- 职责:
- 通过SWFRT API请求时间测量服务
- 处理测量结果用于应用逻辑
2. AUTOSAR服务层组件:
自由运行定时器 (SWFRT):
- 功能:提供高精度的时间测量服务
- 职责:
- 提供精确的时间测量功能
- 拓展硬件定时器功能
- 跨多个应用程序共享定时器资源
- 管理定时器溢出处理
- 提供统一的API接口给应用程序
操作系统 (OS):
- 功能:提供基础系统服务,包括定时器服务
- 职责:
- 为SWFRT提供基础定时器服务API
- 管理系统时间和中断
3. 基础软件层组件:
通用定时器 (GPT):
- 功能:提供对硬件定时器的访问
- 职责:
- 提供硬件定时器的底层访问
- 配置定时器硬件
- 处理定时器中断
MCU驱动:
- 功能:提供对微控制器硬件的直接访问
- 职责:
- 管理微控制器时钟和电源
- 为GPT提供硬件访问接口
4. 组件间关系:
- 应用软件组件(SWC)使用SWFRT API获取时间测量服务
- SWFRT使用操作系统(OS)的定时器服务API实现其功能
- SWFRT可能直接使用GPT API访问硬件定时器
- GPT使用MCU API访问微控制器硬件
代码示例:
SWFRT配置结构示例:
/* SWFRT模块配置结构 */
typedef struct {uint16 TimeBase; /* 时间基准(滴答数/秒) */uint32 MaxCountValue; /* 最大计数值 */uint8 TimerID; /* 使用的硬件定时器ID */boolean AutoReload; /* 是否自动重载 */boolean NotificationEnabled; /* 是否启用通知 */void (*OverflowNotification)(void); /* 溢出通知回调函数 */
} SwFrt_ConfigType;/* SWFRT API示例 */
Std_ReturnType SwFrt_Init(const SwFrt_ConfigType* ConfigPtr);
Std_ReturnType SwFrt_GetTimeStamp(uint32* TimeStampPtr);
Std_ReturnType SwFrt_GetElapsedTime(uint32 PreviousTimeStamp, uint32* ElapsedTimePtr);
Std_ReturnType SwFrt_StartTimer(void);
Std_ReturnType SwFrt_StopTimer(void);
Std_ReturnType SwFrt_PauseTimer(void);
Std_ReturnType SwFrt_ResumeTimer(void);
3. 自由运行定时器状态管理
3.1 状态图解析
3.2 状态转换说明
状态图展示了AUTOSAR自由运行定时器(SWFRT)的各种状态和状态转换。以下是对图中各个状态和转换的详细解释:
1. 状态说明:
未初始化状态:
- 描述:模块加载后的初始状态
- 特点:
- 模块已加载但未初始化
- API功能不可用
- 无法进行时间测量
停止状态:
- 描述:定时器已初始化但未启动
- 特点:
- 模块已初始化
- 定时器处于停止状态
- 可以启动定时器
- 计数器值保持在初始值
运行中状态:
- 描述:定时器激活并计数
- 特点:
- 定时器激活并计数
- 可以读取当前计数值
- 可以获取时间间隔测量
- 定时器可能会发生溢出
暂停状态:
- 描述:定时器暂时停止计数
- 特点:
- 定时器停止计数
- 保持当前计数值
- 可以读取但不再增加
- 可以恢复或停止
错误状态:
- 描述:定时器发生错误
- 特点:
- 硬件定时器故障
- 配置错误
- 计数器溢出错误
- 需要错误处理
2. 状态转换说明:
- 未初始化→停止:通过初始化函数将定时器初始化
- 未初始化→错误:初始化过程中发生错误
- 停止→运行中:启动定时器开始计数
- 运行中→停止:停止定时器终止计数
- 运行中→暂停:暂停定时器,保留当前计数值
- 运行中→错误:运行过程中发生硬件定时器错误
- 暂停→运行中:恢复暂停的定时器,继续计数
- 暂停→停止:从暂停状态直接停止定时器
- 错误→停止:错误处理后重置定时器
代码示例:
状态管理代码示例:
/* SWFRT状态类型定义 */
typedef enum {SWFRT_STATE_UNINIT = 0, /* 未初始化状态 */SWFRT_STATE_STOPPED, /* 停止状态 */SWFRT_STATE_RUNNING, /* 运行中状态 */SWFRT_STATE_PAUSED, /* 暂停状态 */SWFRT_STATE_ERROR /* 错误状态 */
} SwFrt_StateType;/* 模块内部状态变量 */
static SwFrt_StateType SwFrt_State = SWFRT_STATE_UNINIT;/* 状态转换示例函数 */
Std_ReturnType SwFrt_Init(const SwFrt_ConfigType* ConfigPtr)
{Std_ReturnType result = E_OK;if (ConfigPtr == NULL) {SwFrt_State = SWFRT_STATE_ERROR;return E_NOT_OK;}/* 初始化硬件定时器 */if (Gpt_Init(ConfigPtr->TimerID) != E_OK) {SwFrt_State = SWFRT_STATE_ERROR;return E_NOT_OK;}/* 配置定时器 *//* ... 其他初始化代码 ... */SwFrt_State = SWFRT_STATE_STOPPED;return result;
}Std_ReturnType SwFrt_StartTimer(void)
{if (SwFrt_State != SWFRT_STATE_STOPPED && SwFrt_State != SWFRT_STATE_PAUSED) {return E_NOT_OK;}/* 启动定时器硬件 */if (Gpt_StartTimer() != E_OK) {SwFrt_State = SWFRT_STATE_ERROR;return E_NOT_OK;}SwFrt_State = SWFRT_STATE_RUNNING;return E_OK;
}
4. 自由运行定时器交互流程
4.1 序列图解析
4.2 流程详解
序列图展示了AUTOSAR自由运行定时器(SWFRT)的主要交互流程。以下是对图中各个交互阶段和参与者的详细解释:
1. 参与者说明:
应用软件:
- 功能:使用SWFRT服务的应用程序
- 职责:发起定时器操作和时间测量请求
SWFRT:
- 功能:自由运行定时器模块
- 职责:
- 提供高精度时间测量
- 管理溢出处理
- 提供统一的API接口
OS:
- 功能:操作系统模块
- 职责:提供基础定时器服务
GPT:
- 功能:通用定时器模块
- 职责:控制和访问硬件定时器
硬件定时器:
- 功能:物理定时器硬件
- 职责:产生时间计数
2. 交互阶段说明:
初始化阶段:
- 应用软件向SWFRT发送初始化请求
- SWFRT向OS请求定时器服务
- SWFRT向GPT请求初始化硬件定时器
- GPT配置硬件定时器
- 各层依次返回成功响应
时间测量阶段:
- 应用软件请求获取当前时间
- SWFRT向GPT请求读取定时器值
- GPT从硬件定时器获取计数值
- 各层依次返回计数值
- SWFRT将计数值转换为时间戳返回给应用
间隔测量阶段:
- 应用软件请求开始时间测量
- SWFRT存储开始时间点
- 应用软件请求结束时间测量
- SWFRT计算时间差值
- SWFRT返回间隔时间给应用
代码示例:
时间测量相关代码示例:
/* 获取当前时间戳函数 */
Std_ReturnType SwFrt_GetTimeStamp(uint32* TimeStampPtr)
{Std_ReturnType result;uint32 rawCounter;if (TimeStampPtr == NULL) {return E_NOT_OK;}if (SwFrt_State != SWFRT_STATE_RUNNING && SwFrt_State != SWFRT_STATE_PAUSED) {return E_NOT_OK;}/* 读取定时器值 */result = Gpt_GetTimerValue(&rawCounter);if (result != E_OK) {return result;}/* 将原始计数器值转换为时间戳 */*TimeStampPtr = rawCounter;return E_OK;
}/* 计算经过时间函数 */
Std_ReturnType SwFrt_GetElapsedTime(uint32 PreviousTimeStamp, uint32* ElapsedTimePtr)
{uint32 currentTimeStamp;Std_ReturnType result;if (ElapsedTimePtr == NULL) {return E_NOT_OK;}if (SwFrt_State != SWFRT_STATE_RUNNING && SwFrt_State != SWFRT_STATE_PAUSED) {return E_NOT_OK;}/* 获取当前时间戳 */result = SwFrt_GetTimeStamp(¤tTimeStamp);if (result != E_OK) {return result;}/* 计算经过的时间 */if (currentTimeStamp >= PreviousTimeStamp) {/* 没有溢出的情况 */*ElapsedTimePtr = currentTimeStamp - PreviousTimeStamp;} else {/* 溢出情况处理 */*ElapsedTimePtr = (SwFrt_Config.MaxCountValue - PreviousTimeStamp) + currentTimeStamp + 1;}return E_OK;
}
5. 总结与应用
AUTOSAR自由运行定时器(SWFRT)是AUTOSAR标准中重要的基础组件,为应用软件提供了精确的时间测量功能。它具有以下几个主要特点:
-
架构优势:
- 清晰的层次结构,支持模块化设计
- 标准化的接口,便于跨平台移植
- 灵活的配置选项,适应不同硬件环境
-
状态管理:
- 完整的状态管理机制,确保定时器操作安全可靠
- 错误处理和恢复机制,提高系统稳定性
- 支持暂停/恢复功能,满足复杂应用场景需求
-
交互流程:
- 标准化的初始化和操作流程
- 高效的时间测量机制,减少系统开销
- 优化的溢出处理,保证长时间运行的准确性
-
典型应用场景:
- 任务执行时间测量
- 事件间隔时间计算
- 超时监控
- 周期性任务触发
- 性能分析和基准测试
SWFRT模块的设计充分考虑了汽车电子系统的特殊需求,包括高精度、低资源消耗和强大的错误处理能力,使其成为AUTOSAR架构中不可或缺的组成部分。