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

AUTOSAR进阶图解==>AUTOSAR_SRS_TimeService

AUTOSAR时间服务(Time Service)模块详解

基于AUTOSAR标准的Time Service模块分析与图解

目录

  • 1. 文档范围
  • 2. 功能概述
    • 2.1 Time Service模块架构
    • 2.2 Time Service类结构
    • 2.3 Time Service状态模型
  • 3. 术语与缩略语
  • 4. 总结

1. 文档范围

本文档定义了BSW模块Time Service的需求规范。Time Service模块是AUTOSAR经典平台的一部分,为基于时间的功能提供服务。

首次规范要求范围是针对非安全相关系统的基本软件模块。对于在安全相关系统中实施基本软件模块,应检查是否需要额外要求。


2. 功能概述

Time Service模块是服务层的一部分,为基于时间的功能提供服务。主要用例包括:

  • 基于时间的状态机
  • 时间测量
  • 超时监控
  • 忙等待

该模块提供了多种"计时器类型"——即所谓的"Time Service Predef Timers",这些计时器在硬件支持且配置启用的情况下可用。

2.1 Time Service模块架构

在这里插入图片描述

2.1.1 架构组件解释
组件 Time Service:
  • 职责: Time Service模块是AUTOSAR服务层的核心组件,负责提供各种基于时间的功能服务
  • 功能点:
    • 提供Time Service Predef Timers(预定义计时器)
    • 支持时间基准状态机实现
    • 提供超时监控机制
    • 提供时间测量功能
    • 提供忙等待功能

Time Service Predef Timers基于GPT Driver提供的GPT Predef Timers,这些是由GPT驱动提供的免费运行的硬件计时器。每个预定义计时器都有固定的时钟周期(物理时间单位)和固定的位数(物理范围),从而确保时间基础功能在所有支持所需Time Service Predef Timers的平台上兼容。

组件 GPT Driver:
  • 职责: GPT驱动位于ECU抽象层,为Time Service提供硬件计时器接口
  • 功能点:
    • 提供GPT Predef Timers(预定义GPT计时器)
    • 提供底层计时功能

需要注意的是,Time Service模块不使用和分发GPT驱动的所有功能。此外,所有服务都由用户调用(轮询模式),不支持通知方式。Time Service模块也不是"计时器堆栈"的顶层。

2.1.2 代码示例
/* Time Service模块初始化示例 */
void TimeService_Init(void)
{/* 初始化Time Service模块内部状态 */timeServiceInitialized = TRUE;/* 初始化预定义计时器 */GPT_StartPredefTimer(GPT_PREDEF_TIMER_1US);GPT_StartPredefTimer(GPT_PREDEF_TIMER_100US);/* 其他初始化工作 */
}/* 使用Time Service进行忙等待示例 */
Std_ReturnType TimeService_BusyWait(uint32 microseconds)
{if (!timeServiceInitialized) {return E_NOT_OK;}/* 使用预定义计时器执行忙等待 */return TimeService_WaitWithCheckPredefTimer(TIME_SERVICE_TIMER_1US, microseconds);
}

2.2 Time Service类结构

在这里插入图片描述

2.2.1 类结构解释
类 TimeService:
  • 功能: Time Service模块的主要类,提供各种时间服务API
  • 关键API:
    • GetCounterValue: 获取指定计数器的当前值
    • GetElapsedValue: 获取自上次读取以来经过的时间值
    • GetTimeStamp: 获取当前时间戳
    • GetTimeStampValue: 获取时间戳值
    • WaitWithCheckPredefTimer: 使用预定义计时器执行带检查的等待
    • CompareTimeStamp: 比较两个时间戳
    • GetVersionInfo: 获取版本信息
类 TimeService_PredefTimer:
  • 功能: Time Service预定义计时器的配置结构
  • 关键属性:
    • BitSize: 预定义计时器的位大小,决定计时器的最大计数范围
    • TickDuration: 预定义计时器的时钟周期,表示每个时钟周期的物理时间单位
    • IsEnabled: 指示预定义计时器是否启用
类 GPT_PredefTimer:
  • 功能: GPT预定义计时器,作为Time Service预定义计时器的基础
  • 关键属性:
    • BitSize: GPT预定义计时器的位大小
    • TickDuration: GPT预定义计时器的时钟周期
    • IsEnabled: 指示GPT预定义计时器是否启用

通过这种类结构,Time Service预定义计时器基于GPT预定义计时器实现,从而提供统一的时间服务API。每种计时器类型都有预定义的时钟周期和位大小,确保了在不同平台上的兼容性。

2.2.2 代码示例
/* Time Service模块数据类型定义 */
typedef uint8 CounterType;
typedef uint32 CounterValueType;
typedef uint32 TimeStampValueType;
typedef struct {TimeStampValueType timestamp;uint8 timer_id;
} TimeStampType, *TimeStampPtrType;typedef enum {TIME_ELAPSED,    /* 第一个时间戳晚于第二个时间戳 */TIME_EQUAL,      /* 两个时间戳相等 */TIME_NOT_ELAPSED /* 第一个时间戳早于第二个时间戳 */
} CompareResultType;/* Time Service预定义计时器配置 */
typedef struct {uint8 BitSize;        /* 计时器位大小 */uint32 TickDuration;  /* 计时器时钟周期(微秒) */boolean IsEnabled;    /* 计时器启用状态 */
} TimeService_PredefTimerType;/* Time Service API实现示例 */
Std_ReturnType TimeService_GetCounterValue(CounterType TimerId, CounterValueType* Value)
{if (TimerId >= MAX_TIMER_ID || Value == NULL) {return E_NOT_OK;}/* 通过GPT驱动获取计数器值 */return GPT_GetPredefTimerValue(TimerId, Value);
}Std_ReturnType TimeService_GetElapsedValue(CounterType TimerId, CounterValueType* PreviousValue, CounterValueType* ElapsedValue)
{if (TimerId >= MAX_TIMER_ID || PreviousValue == NULL || ElapsedValue == NULL) {return E_NOT_OK;}CounterValueType currentValue;Std_ReturnType result;/* 获取当前计数器值 */result = GPT_GetPredefTimerValue(TimerId, &currentValue);if (result != E_OK) {return result;}/* 计算经过的时间值 */if (currentValue >= *PreviousValue) {*ElapsedValue = currentValue - *PreviousValue;} else {/* 处理计数器溢出情况 */*ElapsedValue = (0xFFFFFFFF - *PreviousValue) + currentValue + 1;}/* 更新上一次值 */*PreviousValue = currentValue;return E_OK;
}

2.3 Time Service状态模型

在这里插入图片描述

2.3.1 状态模型解释
状态 未初始化:
  • 描述: Time Service模块尚未初始化的状态
  • 特性: 在这个状态下,模块的任何功能都不可用
  • 转换: 通过初始化过程转换到已初始化状态
状态 已初始化:
  • 描述: Time Service模块成功初始化后的状态
  • 特性: 在这个状态下,模块的所有功能都可用
  • 子状态:
    • 空闲: 模块未执行任何特定功能的默认状态
    • 执行时间测量: 模块正在执行时间测量功能
    • 超时监控: 模块正在执行超时监控功能
    • 忙等待: 模块正在执行忙等待功能

Time Service模块的状态模型展示了模块在初始化后如何在各个功能状态间转换。用户可以通过调用不同的API函数触发状态转换:

  • 调用GetTimeStamp()GetTimeStampValue()会从空闲状态转换到执行时间测量状态
  • 调用GetElapsedValue()会从空闲状态转换到超时监控状态
  • 调用WaitWithCheckPredefTimer()会从空闲状态转换到忙等待状态

所有功能完成后,模块会自动返回到空闲状态。模块采用轮询模式,所有服务都由用户调用,不支持通知方式。

2.3.2 代码示例
/* Time Service模块状态定义 */
typedef enum {TIMESERVICE_UNINIT,   /* 未初始化 */TIMESERVICE_INIT      /* 已初始化 */
} TimeService_StateType;/* 内部功能状态 */
typedef enum {TIMESERVICE_IDLE,            /* 空闲 */TIMESERVICE_MEASURING,       /* 执行时间测量 */TIMESERVICE_MONITORING,      /* 超时监控 */TIMESERVICE_BUSY_WAITING     /* 忙等待 */
} TimeService_FuncStateType;/* 模块内部状态变量 */
static TimeService_StateType timeServiceState = TIMESERVICE_UNINIT;
static TimeService_FuncStateType timeServiceFuncState = TIMESERVICE_IDLE;/* 时间测量功能示例 */
Std_ReturnType TimeService_GetTimeStamp(TimeStampPtrType TimeStampPtr)
{if (timeServiceState != TIMESERVICE_INIT) {return E_NOT_OK;}if (TimeStampPtr == NULL) {return E_NOT_OK;}/* 更新功能状态 */timeServiceFuncState = TIMESERVICE_MEASURING;/* 获取时间戳 */CounterValueType value;Std_ReturnType result = GPT_GetPredefTimerValue(GPT_PREDEF_TIMER_1US, &value);if (result == E_OK) {TimeStampPtr->timestamp = value;TimeStampPtr->timer_id = GPT_PREDEF_TIMER_1US;}/* 恢复空闲状态 */timeServiceFuncState = TIMESERVICE_IDLE;return result;
}/* 超时监控功能示例 */
Std_ReturnType TimeService_CheckTimeout(CounterType TimerId,CounterValueType StartValue,CounterValueType Timeout,boolean* TimeoutOccurred)
{if (timeServiceState != TIMESERVICE_INIT || TimeoutOccurred == NULL) {return E_NOT_OK;}/* 更新功能状态 */timeServiceFuncState = TIMESERVICE_MONITORING;CounterValueType currentValue;CounterValueType elapsedValue;Std_ReturnType result;/* 获取当前计数器值 */result = GPT_GetPredefTimerValue(TimerId, &currentValue);if (result == E_OK) {/* 计算经过的时间 */if (currentValue >= StartValue) {elapsedValue = currentValue - StartValue;} else {/* 处理计数器溢出 */elapsedValue = (0xFFFFFFFF - StartValue) + currentValue + 1;}/* 判断是否超时 */*TimeoutOccurred = (elapsedValue >= Timeout);}/* 恢复空闲状态 */timeServiceFuncState = TIMESERVICE_IDLE;return result;
}

3. 术语与缩略语

缩略语/术语描述
Time Service Predef TimerTime Service预定义计时器
GPT Predef TimerGPT预定义计时器,是由GPT驱动提供的免费运行的上计数器

4. 总结

AUTOSAR Time Service模块作为服务层的重要组成部分,为汽车软件提供了基本的时间服务功能。通过预定义计时器机制,它确保了在不同平台上时间基础功能的兼容性。

主要特点:

  • 提供多种预定义计时器类型,具有固定的时钟周期和物理范围
  • 支持时间基准状态机、时间测量、超时监控和忙等待等功能
  • 采用轮询模式,所有服务由用户调用,不支持通知方式
  • 基于GPT驱动提供的硬件计时器实现

这些功能使Time Service模块成为AUTOSAR架构中实现基于时间功能的关键组件,为汽车电子控制单元(ECU)的开发提供了标准化的时间服务接口。

http://www.dtcms.com/a/299321.html

相关文章:

  • Raft 协议 Paxos协议 和zk协议的特点和异同
  • 【Pandas】pandas Index objects Index.shape
  • 【温度传感器】热电偶、热敏电阻、热电阻、热成像仪原理及精度解析
  • ASP.NET Core MVC中taghelper的ModelExpression详解
  • .NET Core中的配置系统
  • 记录和分享抓取的数字货币和大A时序数据
  • 去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新
  • AI代理性能提升实战:LangChain+LangGraph内存管理与上下文优化完整指南
  • 如何创建或查看具有 repo 权限的 GitHub 个人访问令牌(PAT)
  • kafka的消费者负载均衡机制
  • 《人性的弱点》重构【01】
  • Java:采用mybatis+pagehealper优雅的实现分页功能
  • Flutter 提取图像主色调 ColorScheme.fromImageProvider
  • Go 的时间包:理解单调时间与挂钟时间
  • SWC 深入全面讲解
  • 集成学习的相关理论阐述
  • RocketMQ学习系列之——特殊消息类型
  • 塞舌尔公司良好信誉证明Certificate of Good Standing证书的用途
  • 大众化餐饮:把日常过成诗
  • 基于POD和DMD方法的压气机叶片瞬态流场分析与神经网络预测
  • 幸福网咖订座点餐小程序的设计与实现
  • 启动式service
  • Java同步锁性能优化:15个高效实践与深度解析
  • ARM SMMUv3控制器初始化及设备树分析(七)
  • Cgroup 控制组学习(一)
  • org.apache.lucene.search.Query#rewrite(IndexSearcher)过时讲解
  • C程序内存布局详解
  • Linux内核设计与实现 - 第14章 块I/O层
  • Aerospike Java客户端核心API实战指南:从基础操作到高级功能全解析
  • JAVA算法题练习day1