AUTOSAR进阶图解==>AUTOSAR_SWS_HWTestManager

AUTOSAR 硬件测试管理器(HTMSS)详解

AUTOSAR 硬件测试管理启动和关闭测试管理模块技术深度解析

目录

  1. 概述
    1.1 HTMSS模块的目的
    1.2 功能概览
    1.3 HTMSS在AUTOSAR架构中的位置
  2. 模块架构
    2.1 架构概览
    2.2 模块组件详解
    2.3 接口说明
  3. 状态管理
    3.1 状态机概览
    3.2 状态转换
  4. 操作序列
    4.1 启动测试序列
    4.2 关闭测试序列
  5. 配置结构
    5.1 配置概览
    5.2 配置参数详解
  6. 总结

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:

  • 功能: HTMSS模块的通用配置参数
  • 关键属性:
    • HTMSSDevErrorDetect:
      • 描述: 启用或禁用开发错误检测
      • 类型: boolean
      • 取值范围: true/false
      • 默认值: false
      • 约束: 在开发阶段建议启用,在生产阶段可禁用
    • HTMSSVersionInfoApi:
      • 描述: 启用或禁用版本信息API
      • 类型: boolean
      • 取值范围: true/false
      • 默认值: false
      • 约束: 无
    • HTMSSMainFunctionPeriod:
      • 描述: HTMSS主函数调用周期(秒)
      • 类型: float
      • 取值范围: 大于0的浮点数
      • 默认值: 0.01
      • 约束: 取决于系统配置
    • HTMSSMaxStartupTest:
      • 描述: 支持的最大启动测试数量
      • 类型: integer
      • 取值范围: 大于0的整数
      • 默认值: 无默认值,必须配置
      • 约束: 不得超过系统资源限制
    • HTMSSMaxShutdownTest:
      • 描述: 支持的最大关闭测试数量
      • 类型: integer
      • 取值范围: 大于0的整数
      • 默认值: 无默认值,必须配置
      • 约束: 不得超过系统资源限制

类 HTMSSConfigSet:

  • 功能: 包含测试配置的配置集合
  • 关键属性:
    • HTMSSTests[]:
      • 描述: 指向一个或多个测试配置的引用数组
      • 类型: 引用数组
      • 约束: 测试数量不得超过HTMSSMaxStartupTest和HTMSSMaxShutdownTest
    • HTMSSTestCount:
      • 描述: 配置的测试总数
      • 类型: integer
      • 取值范围: 大于0的整数
      • 默认值: 无默认值,必须配置
      • 约束: 必须与HTMSSTests数组大小一致

类 HTMSSTest:

  • 功能: 单个测试的配置
  • 关键属性:
    • HTMSSTestId:
      • 描述: 测试的唯一标识符
      • 类型: integer
      • 取值范围: 大于0的整数
      • 默认值: 无默认值,必须配置
      • 约束: 在同一配置集中必须唯一
    • HTMSSTestDescription:
      • 描述: 测试的文本描述
      • 类型: string
      • 取值范围: 任意文本
      • 默认值: 空字符串
      • 约束: 无
    • HTMSSTestGroup:
      • 描述: 测试组类型(启动、关闭或两者)
      • 类型: HTMSS_TestGroupType
      • 取值范围: HTMSS_STARTUP, HTMSS_SHUTDOWN, HTMSS_STARTUP_SHUTDOWN
      • 默认值: 无默认值,必须配置
      • 约束: 必须是有效的枚举值
    • HTMSSTestResources:
      • 描述: 测试的硬件资源标识符
      • 类型: integer
      • 取值范围: 取决于硬件平台
      • 默认值: 无默认值,必须配置
      • 约束: 必须指向有效的硬件资源
    • HTMSSTestResourceReference:
      • 描述: 指向测试资源的引用
      • 类型: 引用
      • 约束: 必须指向有效的资源配置

枚举类型:

类 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
      • 取值范围: 取决于硬件平台

代码示例:

/* 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模块,系统集成商可以实现以下目标:

  1. 提高系统的安全性和可靠性
  2. 在启动和关闭阶段检测潜在的硬件故障
  3. 根据测试结果执行适当的安全响应
  4. 将微控制器特定测试集成到标准AUTOSAR架构中

HTMSS模块的使用是可选的,只有在需要提供的功能时才需要集成。要成功集成HTMSS模块,必须实现微控制器特定测试包(MSTP)和MSTP包装器,以便将非AUTOSAR的测试功能适配到AUTOSAR架构中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值