AUTOSAR进阶图解==>AUTOSAR_SRS_TimeService
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, ¤tValue);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, ¤tValue);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 Timer | Time Service预定义计时器 |
GPT Predef Timer | GPT预定义计时器,是由GPT驱动提供的免费运行的上计数器 |
4. 总结
AUTOSAR Time Service模块作为服务层的重要组成部分,为汽车软件提供了基本的时间服务功能。通过预定义计时器机制,它确保了在不同平台上时间基础功能的兼容性。
主要特点:
- 提供多种预定义计时器类型,具有固定的时钟周期和物理范围
- 支持时间基准状态机、时间测量、超时监控和忙等待等功能
- 采用轮询模式,所有服务由用户调用,不支持通知方式
- 基于GPT驱动提供的硬件计时器实现
这些功能使Time Service模块成为AUTOSAR架构中实现基于时间功能的关键组件,为汽车电子控制单元(ECU)的开发提供了标准化的时间服务接口。