AUTOSAR 硬件测试管理器(HTMSS)详解
目录
- 概述
1.1 HTMSS模块的目的
1.2 功能概览
1.3 HTMSS在AUTOSAR架构中的位置 - 模块架构
2.1 架构概览
2.2 模块组件详解
2.3 接口说明 - 状态管理
3.1 状态机概览
3.2 状态转换 - 操作序列
4.1 启动测试序列
4.2 关闭测试序列 - 配置结构
5.1 配置概览
5.2 配置参数详解 - 总结
1. 概述
1.1 HTMSS模块的目的
硬件测试管理启动和关闭模块(Hardware Test Management startup shutdown, HTMSS)是AUTOSAR基础软件中的一个重要模块,位于服务层。该模块的主要目的是提供一个基础设施,用于集成和转换微控制器制造商特定的启动和关闭测试(如内置自检测试BIST)的测试结果/状态,使其可在AUTOSAR标准软件平台内使用。
HTMSS模块通过标准化的接口,允许应用软件组件访问微控制器硬件测试的结果,以便在安全相关系统中评估微控制器操作的故障状态。这种机制有助于在系统启动和关闭阶段检测潜在的硬件故障,从而提高系统的安全性和可靠性。
1.2 功能概览
HTMSS模块提供以下核心功能:
- 测试配置管理:允许配置MSTP(微控制器特定测试包)的启动和关闭测试
- 测试执行触发:在ECU启动和关闭阶段触发MSTP测试的执行
- 测试结果收集:从MSTP收集测试结果和状态信息
- 测试状态提供:向其他AUTOSAR模块(包括应用软件组件)提供MSTP测试状态
- 测试错误处理:通过错误钩子函数(error hooks)处理测试失败情况
HTMSS模块不添加任何测试功能,它只是将AUTOSAR环境外部的微控制器特定测试功能集成到AUTOSAR架构中。实际的测试实现和执行由微控制器特定测试包(MSTP)负责,该包通常由半导体制造商提供。
1.3 HTMSS在AUTOSAR架构中的位置
HTMSS模块集成在AUTOSAR BSW服务层中,它与ECU状态管理器(EcuM)、运行时环境(RTE)、应用软件组件以及微控制器特定测试包(MSTP)交互。
2. 模块架构
2.1 架构概览
下图展示了HTMSS模块在AUTOSAR架构中的位置及其与其他模块的关系:
2.2 模块组件详解
组件 应用软件组件(Application SWC):
- 职责: 收集HTMSS测试结果进行评估,然后决定软件行为
- 功能点:
- 通过RTE访问HTMSS测试结果
- 基于测试结果评估系统状态
- 在需要时将测试结果存储在非易失性存储器中
组件 运行时环境(RTE):
- 职责: 提供HTMSS模块与应用软件层之间的数据交换
- 功能点:
- 管理测试结果数据在BSW和应用软件组件之间的传输
- 提供标准化的接口访问HTMSS服务
组件 ECU状态管理器(EcuM):
- 职责: 访问HTMSS服务以启动测试并收集测试结果
- 功能点:
- 在初始化阶段调用HTMSS初始化函数
- 在启动阶段请求执行启动测试
- 在关闭阶段请求执行关闭测试
- 基于测试结果协调ECU状态转换
组件 硬件测试管理器(HTMSS):
- 职责: 管理启动和关闭测试,收集测试结果
- 功能点:
- 测试配置: 配置MSTP启动和关闭测试
- 测试状态管理: 管理测试执行状态
- 测试结果收集: 从MSTP收集测试结果
组件 默认错误追踪器(DET):
- 职责: 记录HTMSS模块的开发错误
- 功能点:
- 接收并记录HTMSS检测到的开发错误
- 提供错误信息用于调试
组件 MCU驱动:
- 职责: 提供MCU基本操作和状态信息
- 功能点:
- 提供复位原因信息
- 处理ECU复位请求
组件 微控制器特定测试包(MSTP):
- 职责: 执行微控制器特定的启动和关闭测试
- 功能点:
- 执行硬件自检测试
- 提供测试结果
- 实现制造商特定的测试功能
组件 MSTP包装器:
- 职责: 为MSTP提供AUTOSAR适配层
- 功能点:
- 封装MSTP接口使其符合AUTOSAR架构
- 将HTMSS请求转换为MSTP特定格式
- 可通过AUTOSAR方法/过程手动实现或生成/配置
2.3 接口说明
接口 测试结果接口:
- 提供的服务: 向应用软件提供测试结果和状态
- 调用方式: 通过RTE由应用软件组件调用
接口 初始化和触发测试接口:
- 提供的服务: 初始化HTMSS模块和触发测试执行
- 调用方式: 由EcuM在启动和关闭阶段调用
接口 MSTP配置接口:
- 提供的服务: 配置MSTP启动和关闭测试
- 调用方式: 由MSTP包装器使用
接口 测试状态接口:
- 提供的服务: 提供当前测试执行状态
- 调用方式: 由RTE和其他BSW模块使用
接口 错误报告接口:
- 提供的服务: 报告HTMSS模块的开发错误
- 调用方式: 由HTMSS内部调用向DET报告错误
接口 复位原因接口:
- 提供的服务: 提供ECU复位的原因信息
- 调用方式: 由HTMSS在初始化阶段调用
代码示例:
/* HTMSS模块与其他组件的接口示例 */
/* 初始化HTMSS模块 */
Std_ReturnType HTMSS_Init(const HTMSS_TestCfgType* ConfigPtr)
{
/* 配置验证 */
if (ConfigPtr == NULL) {
/* 报告错误 */
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_INIT_API_ID, HTMSS_E_NULL_POINTER);
return E_NOT_OK;
}
/* 初始化内部变量 */
htmss_state = HTMSS_INIT;
/* 配置MSTP测试 */
return E_OK;
}
/* 执行启动测试 */
Std_ReturnType HTMSS_StartupTestExecution(void)
{
Std_ReturnType result;
/* 状态检查 */
if (htmss_state != HTMSS_INIT && htmss_state != HTMSS_IDLE) {
/* 报告错误 */
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_STARTUP_TEST_API_ID, HTMSS_E_NOT_INIT);
return E_NOT_OK;
}
/* 设置状态为忙碌 */
htmss_state = HTMSS_BUSY;
/* 调用MSTP执行启动测试 */
result = MSTP_Wrapper_ExecuteStartupTest();
/* 处理测试结果 */
if (result != E_OK) {
/* 调用错误钩子 */
HTMSS_StartupTestErrorHook();
}
/* 设置状态为空闲 */
htmss_state = HTMSS_IDLE;
return result;
}
/* 获取测试状态 */
Std_ReturnType HTMSS_GetTestStatus(uint8 TestId, HTMSS_TestStatusType* StatusPtr)
{
/* 参数检查 */
if (StatusPtr == NULL) {
/* 报告错误 */
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_GET_TEST_STATUS_API_ID, HTMSS_E_NULL_POINTER);
return E_NOT_OK;
}
/* 检查初始化状态 */
if (htmss_state == HTMSS_UINIT) {
/* 报告错误 */
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_GET_TEST_STATUS_API_ID, HTMSS_E_NOT_INIT);
return E_NOT_OK;
}
/* 获取指定测试ID的状态 */
*StatusPtr = htmss_test_results[TestId];
return E_OK;
}
3. 状态管理
3.1 状态机概览
HTMSS模块具有一个明确定义的状态机,用于管理其生命周期和操作状态。下图展示了HTMSS模块的状态机:
3.2 状态转换
HTMSS模块具有以下四种状态:
状态 未初始化(HTMSS_UINIT):
- 描述: HTMSS模块未初始化的状态,这是模块初始默认值
- 特点:
- 在此状态下调用任何服务函数将返回错误
- 只能通过HTMSS_Init()函数离开此状态
- 在执行HTMSS_Init()前,模块处于此状态
状态 已初始化(HTMSS_INIT):
- 描述: HTMSS模块已成功初始化
- 特点:
- 配置数据已加载
- 内部变量已初始化
- 模块准备接受测试执行请求
- 此状态是初始化过程完成后的状态
状态 空闲状态(HTMSS_IDLE):
- 描述: 模块已初始化且当前没有测试正在执行
- 特点:
- 无测试在执行中
- 可以接受新的测试请求
- 测试结果可用
- 测试完成后会返回到此状态
状态 忙碌状态(HTMSS_BUSY):
- 描述: 模块正在执行请求的测试
- 特点:
- 测试正在执行中
- 新的测试请求将被拒绝
- 会返回HTMSS_E_BUSY错误
- 测试完成后转换为HTMSS_IDLE状态
状态转换:
- HTMSS_UINIT → HTMSS_INIT: 通过调用HTMSS_Init()函数实现
- HTMSS_INIT → HTMSS_IDLE: 初始化成功完成后自动转换
- HTMSS_IDLE → HTMSS_BUSY: 请求测试执行时转换
- HTMSS_BUSY → HTMSS_IDLE: 测试完成并收集结果后转换
代码示例:
/* HTMSS状态管理示例代码 */
/* HTMSS状态定义 */
typedef enum {
HTMSS_UINIT = 0x00, /* 未初始化状态 */
HTMSS_INIT = 0x01, /* 已初始化状态 */
HTMSS_IDLE = 0x02, /* 空闲状态 */
HTMSS_BUSY = 0x03 /* 忙碌状态 */
} HTMSS_StateType;
/* 模块当前状态 */
static HTMSS_StateType htmss_state = HTMSS_UINIT;
/* 状态检查函数 */
static Std_ReturnType HTMSS_CheckState(uint8 api_id, HTMSS_StateType expected_state)
{
if (htmss_state != expected_state) {
/* 报告状态错误 */
if (htmss_state == HTMSS_UINIT) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID, api_id, HTMSS_E_NOT_INIT);
} else if (htmss_state == HTMSS_BUSY) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID, api_id, HTMSS_E_BUSY);
} else {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID, api_id, HTMSS_E_PARAM_INVALID);
}
return E_NOT_OK;
}
return E_OK;
}
/* 状态转换函数 */
static void HTMSS_SetState(HTMSS_StateType new_state)
{
htmss_state = new_state;
}
/* 获取当前状态 */
HTMSS_StateType HTMSS_GetCurrentState(void)
{
return htmss_state;
}
4. 操作序列
4.1 启动测试序列
下图展示了HTMSS模块的启动测试执行序列:
启动测试序列分为三个主要阶段:
参与者 ECU状态管理器(EcuM):
- 角色: 协调整个ECU的状态管理
- 职责:
- 初始化HTMSS模块
- 触发启动测试执行
- 基于测试结果进行后续操作
参与者 硬件测试管理器(HTMSS):
- 角色: 管理启动和关闭测试
- 职责:
- 提供初始化和触发测试的接口
- 协调MSTP测试执行
- 收集和提供测试结果
参与者 MSTP包装器和MSTP:
- 角色: 执行微控制器特定测试
- 职责:
- 执行实际的硬件测试
- 提供测试结果给HTMSS
- 将MSTP特定接口适配到AUTOSAR接口
参与者 应用软件组件(Application SWC):
- 角色: 使用测试结果的应用软件
- 职责:
- 获取测试状态
- 基于测试结果执行应用逻辑
- 可能触发安全相关响应
操作组 HTMSS初始化:
- 场景: 系统启动阶段,ECU状态管理器初始化HTMSS模块
- 触发条件: ECU初始化过程
- 主要操作:
- EcuM调用HTMSS_Init函数
- HTMSS加载配置数据
- HTMSS初始化内部变量
- 返回初始化状态给EcuM
操作组 启动测试执行:
- 场景: ECU启动阶段执行微控制器启动测试
- 触发条件: ECU启动流程中的测试执行阶段
- 主要操作:
- EcuM调用HTMSS_StartupTestExecution函数
- HTMSS设置状态为HTMSS_BUSY
- HTMSS请求MSTP包装器执行启动测试
- MSTP执行硬件测试并返回结果
- HTMSS处理测试结果,成功或失败
- 如果测试失败,调用HTMSS_StartupTestErrorHook
- HTMSS设置状态为HTMSS_IDLE
- 返回测试执行结果给EcuM
操作组 获取测试结果:
- 场景: 应用软件获取测试结果
- 触发条件: 应用软件需要了解测试状态
- 主要操作:
- 应用SWC调用HTMSS_GetTestStatus函数
- HTMSS检查测试ID并获取状态
- HTMSS返回测试状态给应用SWC
- 应用SWC基于测试结果执行应用逻辑
函数 HTMSS_Init(ConfigPtr):
- 描述: 初始化HTMSS模块,加载配置数据,设置内部变量
- 参数:
- ConfigPtr [输入]: 指向HTMSS配置数据的指针,类型: HTMSS_TestCfgType*,取值范围: 有效的配置指针或NULL_PTR(对于PC变体)
- 返回值:
- E_OK: 初始化成功
- E_NOT_OK: 初始化失败
函数 HTMSS_StartupTestExecution():
- 描述: 触发MSTP执行启动测试
- 参数: 无
- 返回值:
- E_OK: 启动测试执行成功
- E_NOT_OK: 启动测试执行失败
- HTMSS_E_NOT_INIT: 模块未初始化
- HTMSS_E_BUSY: 模块当前正在执行测试
函数 HTMSS_GetTestStatus(TestId, StatusPtr):
- 描述: 获取指定测试ID的测试状态
- 参数:
- TestId [输入]: 测试标识符,类型: uint8,取值范围: 取决于配置
- StatusPtr [输出]: 指向存储测试状态的指针,类型: HTMSS_TestStatusType*,取值范围: 有效的指针
- 返回值:
- E_OK: 状态获取成功
- E_NOT_OK: 状态获取失败
- HTMSS_E_NOT_INIT: 模块未初始化
- HTMSS_E_NULL_POINTER: 空指针参数
代码示例:
/* HTMSS启动测试序列示例代码 */
/* 应用软件组件获取测试状态示例 */
void Application_EvaluateTestResults(void)
{
Std_ReturnType result;
HTMSS_TestStatusType testStatus;
/* 获取特定测试ID的状态 */
result = HTMSS_GetTestStatus(TEST_ID_MEMORY, &testStatus);
if (result == E_OK) {
if (testStatus == HTMSS_STATUS_OK) {
/* 测试通过,正常执行 */
Normal_Operation();
} else if (testStatus == HTMSS_STATUS_NOK) {
/* 测试失败,执行安全响应 */
Safety_Response();
} else {
/* 测试状态无效或未初始化 */
Error_Handling();
}
} else {
/* 获取测试状态失败 */
Error_Handling();
}
}
/* HTMSS启动测试执行实现示例 */
Std_ReturnType HTMSS_StartupTestExecution(void)
{
Std_ReturnType result;
uint8 i;
/* 检查初始化状态 */
if (htmss_state == HTMSS_UINIT) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_STARTUP_TEST_API_ID, HTMSS_E_NOT_INIT);
return E_NOT_OK;
}
/* 检查是否已经在执行测试 */
if (htmss_state == HTMSS_BUSY) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_STARTUP_TEST_API_ID, HTMSS_E_BUSY);
return E_NOT_OK;
}
/* 设置状态为忙碌 */
htmss_state = HTMSS_BUSY;
/* 执行所有配置的启动测试 */
for (i = 0; i < htmss_config->HTMSSTestCount; i++) {
/* 检查测试是否为启动测试 */
if (htmss_config->HTMSSTests[i].HTMSSTestGroup == HTMSS_STARTUP ||
htmss_config->HTMSSTests[i].HTMSSTestGroup == HTMSS_STARTUP_SHUTDOWN) {
/* 执行测试 */
result = MSTP_Wrapper_ExecuteTest(htmss_config->HTMSSTests[i].HTMSSTestId);
/* 保存测试结果 */
if (result != E_OK) {
htmss_test_results[i] = HTMSS_STATUS_NOK;
/* 调用错误钩子 */
HTMSS_StartupTestErrorHook();
} else {
htmss_test_results[i] = HTMSS_STATUS_OK;
}
}
}
/* 设置状态为空闲 */
htmss_state = HTMSS_IDLE;
return E_OK;
}
4.2 关闭测试序列
下图展示了HTMSS模块的关闭测试执行序列:
关闭测试序列分为四个主要阶段:
操作组 关闭测试执行:
- 场景: ECU关闭阶段执行微控制器关闭测试
- 触发条件: ECU关闭流程中的测试执行阶段
- 主要操作:
- EcuM调用HTMSS_ShutdownTestExecution函数
- HTMSS设置状态为HTMSS_BUSY
- HTMSS请求MSTP包装器执行关闭测试
- MSTP执行硬件测试并返回结果
- HTMSS处理测试结果,成功或失败
- 如果测试失败,调用HTMSS_ShutdownTestErrorHook
- HTMSS设置状态为HTMSS_IDLE
- 返回测试执行结果给EcuM
操作组 保存关闭测试结果:
- 场景: 准备在下次启动时保留关闭测试结果
- 触发条件: 关闭测试完成后的结果存储阶段
- 主要操作:
- EcuM调用HTMSS_PrepareShutdownTests函数
- HTMSS准备在MCU复位后保留测试结果
- HTMSS通过MSTP包装器存储测试结果
- MSTP将结果存储在特定内存区域
- EcuM请求MCU执行复位
操作组 获取上次关闭测试结果:
- 场景: 系统重启后获取上次关闭测试的结果
- 触发条件: MCU复位后的系统初始化
- 主要操作:
- EcuM获取复位原因
- EcuM调用HTMSS_Init初始化HTMSS
- HTMSS检查复位原因
- 如果是关闭测试触发的复位,获取存储的测试结果
- HTMSS处理关闭测试结果,决定当前启动行为
- 返回初始化完成状态给EcuM
操作组 应用获取关闭测试结果:
- 场景: 应用软件获取关闭测试的结果
- 触发条件: 应用软件需要了解关闭测试状态
- 主要操作:
- 应用SWC调用HTMSS_GetShutdownTestStatus函数
- HTMSS检查关闭测试ID并获取状态
- HTMSS返回关闭测试状态给应用SWC
- 应用SWC基于测试结果执行应用逻辑
函数 HTMSS_ShutdownTestExecution():
- 描述: 触发MSTP执行关闭测试
- 参数: 无
- 返回值:
- E_OK: 关闭测试执行成功
- E_NOT_OK: 关闭测试执行失败
- HTMSS_E_NOT_INIT: 模块未初始化
- HTMSS_E_BUSY: 模块当前正在执行测试
函数 HTMSS_PrepareShutdownTests():
- 描述: 准备关闭测试结果存储,以便在下次启动时可用
- 参数: 无
- 返回值:
- E_OK: 准备成功
- E_NOT_OK: 准备失败
函数 HTMSS_GetShutdownTestStatus(TestId, StatusPtr):
- 描述: 获取指定关闭测试ID的测试状态
- 参数:
- TestId [输入]: 测试标识符,类型: uint8,取值范围: 取决于配置
- StatusPtr [输出]: 指向存储测试状态的指针,类型: HTMSS_TestStatusType*,取值范围: 有效的指针
- 返回值:
- E_OK: 状态获取成功
- E_NOT_OK: 状态获取失败
代码示例:
/* HTMSS关闭测试序列示例代码 */
/* 关闭测试执行实现示例 */
Std_ReturnType HTMSS_ShutdownTestExecution(void)
{
Std_ReturnType result;
uint8 i;
/* 检查初始化状态 */
if (htmss_state == HTMSS_UINIT) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_SHUTDOWN_TEST_API_ID, HTMSS_E_NOT_INIT);
return E_NOT_OK;
}
/* 检查是否已经在执行测试 */
if (htmss_state == HTMSS_BUSY) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_SHUTDOWN_TEST_API_ID, HTMSS_E_BUSY);
return E_NOT_OK;
}
/* 设置状态为忙碌 */
htmss_state = HTMSS_BUSY;
/* 执行所有配置的关闭测试 */
for (i = 0; i < htmss_config->HTMSSTestCount; i++) {
/* 检查测试是否为关闭测试 */
if (htmss_config->HTMSSTests[i].HTMSSTestGroup == HTMSS_SHUTDOWN ||
htmss_config->HTMSSTests[i].HTMSSTestGroup == HTMSS_STARTUP_SHUTDOWN) {
/* 执行测试 */
result = MSTP_Wrapper_ExecuteTest(htmss_config->HTMSSTests[i].HTMSSTestId);
/* 保存测试结果 */
if (result != E_OK) {
htmss_shutdown_test_results[i] = HTMSS_STATUS_NOK;
/* 调用错误钩子 */
HTMSS_ShutdownTestErrorHook();
} else {
htmss_shutdown_test_results[i] = HTMSS_STATUS_OK;
}
}
}
/* 设置状态为空闲 */
htmss_state = HTMSS_IDLE;
return E_OK;
}
/* 准备关闭测试结果存储 */
Std_ReturnType HTMSS_PrepareShutdownTests(void)
{
/* 检查初始化状态 */
if (htmss_state == HTMSS_UINIT) {
Det_ReportError(HTMSS_MODULE_ID, HTMSS_INSTANCE_ID,
HTMSS_PREPARE_SHUTDOWN_API_ID, HTMSS_E_NOT_INIT);
return E_NOT_OK;
}
/* 准备测试结果存储 */
return MSTP_Wrapper_StoreTestResults(htmss_shutdown_test_results,
htmss_config->HTMSSTestCount);
}
/* 从上次关闭检索测试结果 */
static Std_ReturnType HTMSS_RetrieveShutdownTestResults(void)
{
Std_ReturnType result;
uint8 resetReason;
/* 获取复位原因 */
result = Mcu_GetResetReason(&resetReason);
if (result != E_OK) {
return E_NOT_OK;
}
/* 检查是否是关闭测试后的复位 */
if (resetReason == MCU_SHUTDOWN_RESET) {
/* 检索存储的测试结果 */
return MSTP_Wrapper_RetrieveTestResults(htmss_shutdown_test_results,
htmss_config->HTMSSTestCount);
}
return E_NOT_OK;
}
5. 配置结构
5.1 配置概览
HTMSS模块的配置结构如下图所示:
5.2 配置参数详解
类 HTMSS:
- 功能: HTMSS模块的顶层配置容器
- 关键属性:
- HTMSSGeneral:
- 描述: 指向HTMSS通用配置的引用
- 类型: 引用
- 约束: 必须指向有效的HTMSSGeneral配置
- HTMSSConfigSet[]:
- 描述: 指向一个或多个HTMSS配置集的引用数组
- 类型: 引用数组
- 约束: 至少需要一个配置集
- HTMSSGeneral:
类 HTMSSGeneral:
- 功能: HTMSS模块的通用配置参数
- 关键属性:
- HTMSSDevErrorDetect:
- 描述: 启用或禁用开发错误检测
- 类型: boolean
- 取值范围: true/false
- 默认值: false
- 约束: 在开发阶段建议启用,在生产阶段可禁用
- HTMSSVersionInfoApi:
- 描述: 启用或禁用版本信息API
- 类型: boolean
- 取值范围: true/false
- 默认值: false
- 约束: 无
- HTMSSMainFunctionPeriod:
- 描述: HTMSS主函数调用周期(秒)
- 类型: float
- 取值范围: 大于0的浮点数
- 默认值: 0.01
- 约束: 取决于系统配置
- HTMSSMaxStartupTest:
- 描述: 支持的最大启动测试数量
- 类型: integer
- 取值范围: 大于0的整数
- 默认值: 无默认值,必须配置
- 约束: 不得超过系统资源限制
- HTMSSMaxShutdownTest:
- 描述: 支持的最大关闭测试数量
- 类型: integer
- 取值范围: 大于0的整数
- 默认值: 无默认值,必须配置
- 约束: 不得超过系统资源限制
- HTMSSDevErrorDetect:
类 HTMSSConfigSet:
- 功能: 包含测试配置的配置集合
- 关键属性:
- HTMSSTests[]:
- 描述: 指向一个或多个测试配置的引用数组
- 类型: 引用数组
- 约束: 测试数量不得超过HTMSSMaxStartupTest和HTMSSMaxShutdownTest
- HTMSSTestCount:
- 描述: 配置的测试总数
- 类型: integer
- 取值范围: 大于0的整数
- 默认值: 无默认值,必须配置
- 约束: 必须与HTMSSTests数组大小一致
- HTMSSTests[]:
类 HTMSSTest:
- 功能: 单个测试的配置
- 关键属性:
- HTMSSTestId:
- 描述: 测试的唯一标识符
- 类型: integer
- 取值范围: 大于0的整数
- 默认值: 无默认值,必须配置
- 约束: 在同一配置集中必须唯一
- HTMSSTestDescription:
- 描述: 测试的文本描述
- 类型: string
- 取值范围: 任意文本
- 默认值: 空字符串
- 约束: 无
- HTMSSTestGroup:
- 描述: 测试组类型(启动、关闭或两者)
- 类型: HTMSS_TestGroupType
- 取值范围: HTMSS_STARTUP, HTMSS_SHUTDOWN, HTMSS_STARTUP_SHUTDOWN
- 默认值: 无默认值,必须配置
- 约束: 必须是有效的枚举值
- HTMSSTestResources:
- 描述: 测试的硬件资源标识符
- 类型: integer
- 取值范围: 取决于硬件平台
- 默认值: 无默认值,必须配置
- 约束: 必须指向有效的硬件资源
- HTMSSTestResourceReference:
- 描述: 指向测试资源的引用
- 类型: 引用
- 约束: 必须指向有效的资源配置
- HTMSSTestId:
枚举类型:
类 HTMSS_TestGroupType:
- 功能: 测试组类型枚举
- 取值:
- HTMSS_STARTUP: 测试仅在启动时执行
- HTMSS_SHUTDOWN: 测试仅在关闭时执行
- HTMSS_STARTUP_SHUTDOWN: 测试在启动和关闭时都执行
类 HTMSS_TestStatusType:
- 功能: 测试状态类型枚举
- 取值:
- HTMSS_STATUS_OK: 测试通过
- HTMSS_STATUS_NOK: 测试失败
- HTMSS_STATUS_INVALID: 测试状态无效
- HTMSS_STATUS_UNINIT: 测试未初始化
类 HTMSS_TestResultType:
- 功能: 测试结果结构体
- 关键属性:
- TestResult:
- 描述: 测试结果(通过、失败、无效)
- 类型: uint8
- 取值范围: 取决于测试状态
- TestSignature:
- 描述: 测试资源标识符
- 类型: uint8
- 取值范围: 取决于硬件平台
- TestResult:
代码示例:
/* HTMSS配置结构示例代码 */
/* 测试组类型枚举 */
typedef enum {
HTMSS_STARTUP = 0, /* 仅启动测试 */
HTMSS_SHUTDOWN = 1, /* 仅关闭测试 */
HTMSS_STARTUP_SHUTDOWN = 2 /* 启动和关闭测试 */
} HTMSS_TestGroupType;
/* 测试状态类型枚举 */
typedef enum {
HTMSS_STATUS_OK = 0, /* 测试通过 */
HTMSS_STATUS_NOK = 1, /* 测试失败 */
HTMSS_STATUS_INVALID = 2, /* 测试状态无效 */
HTMSS_STATUS_UNINIT = 3 /* 测试未初始化 */
} HTMSS_TestStatusType;
/* 测试结果结构体 */
typedef struct {
uint8 TestResult; /* 测试结果 */
uint8 TestSignature; /* 测试资源标识符 */
} HTMSS_TestResultType;
/* 测试配置结构 */
typedef struct {
uint8 HTMSSTestId; /* 测试ID */
const uint8* HTMSSTestDescription; /* 测试描述 */
HTMSS_TestGroupType HTMSSTestGroup; /* 测试组类型 */
uint8 HTMSSTestResources; /* 测试资源标识符 */
void* HTMSSTestResourceReference; /* 测试资源引用 */
} HTMSS_TestType;
/* 配置集结构 */
typedef struct {
const HTMSS_TestType* HTMSSTests; /* 测试配置数组 */
uint8 HTMSSTestCount; /* 测试总数 */
} HTMSS_ConfigSetType;
/* 通用配置结构 */
typedef struct {
boolean HTMSSDevErrorDetect; /* 开发错误检测 */
boolean HTMSSVersionInfoApi; /* 版本信息API */
float32 HTMSSMainFunctionPeriod; /* 主函数周期 */
uint8 HTMSSMaxStartupTest; /* 最大启动测试数量 */
uint8 HTMSSMaxShutdownTest; /* 最大关闭测试数量 */
} HTMSS_GeneralType;
/* HTMSS模块配置结构 */
typedef struct {
const HTMSS_GeneralType* HTMSSGeneral; /* 通用配置 */
const HTMSS_ConfigSetType* HTMSSConfigSet; /* 配置集 */
} HTMSS_ConfigType;
/* 配置实例示例 */
const HTMSS_TestType HTMSSTests[3] = {
{
0x01, /* 测试ID */
"RAM测试", /* 测试描述 */
HTMSS_STARTUP, /* 测试组类型 */
0x01, /* 测试资源标识符 */
NULL /* 测试资源引用 */
},
{
0x02, /* 测试ID */
"ROM测试", /* 测试描述 */
HTMSS_STARTUP_SHUTDOWN, /* 测试组类型 */
0x02, /* 测试资源标识符 */
NULL /* 测试资源引用 */
},
{
0x03, /* 测试ID */
"CPU测试", /* 测试描述 */
HTMSS_SHUTDOWN, /* 测试组类型 */
0x03, /* 测试资源标识符 */
NULL /* 测试资源引用 */
}
};
const HTMSS_GeneralType HTMSSGeneral = {
TRUE, /* 开发错误检测 */
FALSE, /* 版本信息API */
0.01f, /* 主函数周期 */
2, /* 最大启动测试数量 */
2 /* 最大关闭测试数量 */
};
const HTMSS_ConfigSetType HTMSSConfigSet = {
HTMSSTests, /* 测试配置数组 */
3 /* 测试总数 */
};
const HTMSS_ConfigType HTMSSConfig = {
&HTMSSGeneral, /* 通用配置 */
&HTMSSConfigSet /* 配置集 */
};
6. 总结
AUTOSAR硬件测试管理器(HTMSS)模块是AUTOSAR架构中重要的服务层模块,它提供了标准化的接口,用于集成和管理微控制器特定的启动和关闭测试。通过这种机制,安全相关系统可以在启动和关闭阶段检测潜在的硬件故障,从而提高系统的安全性和可靠性。
HTMSS模块的主要特点包括:
- 标准化接口:提供统一的接口访问微控制器特定的测试功能
- 灵活配置:支持针对不同硬件资源的测试配置
- 状态管理:清晰的状态机管理测试执行过程
- 错误处理:提供错误钩子函数处理测试失败情况
- 双向测试:支持启动和关闭测试,以及跨重启的测试结果保留
HTMSS模块与其他AUTOSAR模块(如ECU状态管理器、应用软件组件)以及非AUTOSAR的微控制器特定测试包(MSTP)之间的交互,确保了微控制器硬件测试可以无缝集成到AUTOSAR架构中。
通过合理配置和使用HTMSS模块,系统集成商可以实现以下目标:
- 提高系统的安全性和可靠性
- 在启动和关闭阶段检测潜在的硬件故障
- 根据测试结果执行适当的安全响应
- 将微控制器特定测试集成到标准AUTOSAR架构中
HTMSS模块的使用是可选的,只有在需要提供的功能时才需要集成。要成功集成HTMSS模块,必须实现微控制器特定测试包(MSTP)和MSTP包装器,以便将非AUTOSAR的测试功能适配到AUTOSAR架构中。