当前位置: 首页 > news >正文

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(&currentTimeStamp);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标准中重要的基础组件,为应用软件提供了精确的时间测量功能。它具有以下几个主要特点:

  1. 架构优势

    • 清晰的层次结构,支持模块化设计
    • 标准化的接口,便于跨平台移植
    • 灵活的配置选项,适应不同硬件环境
  2. 状态管理

    • 完整的状态管理机制,确保定时器操作安全可靠
    • 错误处理和恢复机制,提高系统稳定性
    • 支持暂停/恢复功能,满足复杂应用场景需求
  3. 交互流程

    • 标准化的初始化和操作流程
    • 高效的时间测量机制,减少系统开销
    • 优化的溢出处理,保证长时间运行的准确性
  4. 典型应用场景

    • 任务执行时间测量
    • 事件间隔时间计算
    • 超时监控
    • 周期性任务触发
    • 性能分析和基准测试

SWFRT模块的设计充分考虑了汽车电子系统的特殊需求,包括高精度、低资源消耗和强大的错误处理能力,使其成为AUTOSAR架构中不可或缺的组成部分。

http://www.lryc.cn/news/606418.html

相关文章:

  • 基于STM32设计的景区便民服务系统(NBIOT)_261
  • 04百融云策略引擎项目laravel实战步完整安装composer及tcpdf依赖库和验证-优雅草卓伊凡
  • Docker 实战 -- cloudbeaver
  • C++手撕简单KNN
  • Apache Tomcat样例目录session操纵漏洞解读
  • vue+elementUI上传图片至七牛云组件封装及循环使用
  • python逻辑回归:数学原理到实战应用
  • 电子电气架构 --- 车载48V系统开辟全新道路
  • YOLO+Pyqt一键打包成exe(可视化,以v5为例)
  • 在Trae中使用MoonBit月兔1 创建项目
  • 极客大挑战2020(部分wp)
  • 材质:3D渲染的隐形支柱
  • window怎么安装pyqt6以及 安装 pythonqt6 会遇到的问题和怎么解决
  • Ubuntu 下配置 NVIDIA 驱动与 CUDA 环境(适配 RTX 4060Ti)
  • Leetcode-206.反转链表
  • 【前端知识】JS单线程模型深入解析
  • LangGraph认知篇-Send机制
  • 掌握Python三大语句:顺序、条件与循环
  • 【生活系列】MBTI探索 16 种性格类型
  • springcloud04——网关gateway、熔断器 sentinel
  • 难以逾越的夏天
  • 【2025/07/31】GitHub 今日热门项目
  • Excel 知识点汇总
  • JavaScript内存管理完全指南:从入门到精通
  • ABS系统专用磁阻式汽车轮速传感器
  • ansible简单playbook剧本例子
  • RHEL 8.10 离线安装 Ansible 完整教程
  • 30天入门Python(基础篇)——第25天:标准库学习之OS模块
  • 设计模式:责任链模式 Chain of Responsibility
  • Qt_Gif_Creator 基于Qt的屏幕gif录制工具