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

AUTOSAR进阶图解==>AUTOSAR_SWS_EthernetStateManager

AUTOSAR以太网状态管理器(EthSM)详解文档

基于AUTOSAR Classic Platform 4.4.0规范的以太网状态管理器技术详解

目录

  • 1. 概述
  • 2. EthSM架构设计
  • 3. 网络模式状态机
  • 4. 操作序列分析
  • 5. 配置模型
  • 6. API规范
  • 7. 错误处理机制
  • 8. 总结

1. 概述

1.1 EthSM的作用

**AUTOSAR以太网状态管理器(EthSM)**是AUTOSAR Classic Platform中的一个关键基础软件模块,位于ECU抽象层,主要负责:

  • 网络通信模式管理:为通信管理器(ComM)提供抽象接口来启动或关闭以太网集群上的通信
  • 硬件抽象:不直接访问以太网硬件,而是通过以太网接口(EthIf)重定向请求到相应的驱动模块
  • 状态协调:协调以太网控制器、收发器和TcpIp模块的状态,确保通信的可靠性

1.2 主要特性

  1. 分层架构

    • 应用层通过ComM请求通信模式
    • EthSM协调各层模块状态
    • 硬件层提供实际的通信能力
  2. 状态机管理

    • 实现复杂的6状态网络模式状态机
    • 处理各种状态转换条件
    • 支持错误恢复和异常处理
  3. 多网络支持

    • 支持多个独立的以太网网络
    • 每个网络有独立的状态机实例
    • 支持VLAN等虚拟网络

2. EthSM架构设计

在这里插入图片描述

2.1 架构层次分析

应用层
  • 应用软件组件(Application SWC)
    • 功能:业务逻辑处理,通信需求发起方
    • 职责:根据应用需求请求网络通信服务
服务层
  • 通信管理器(ComM)

    • 功能:统一的通信模式管理接口
    • 职责:
      • 接收应用层的通信请求
      • 调用EthSM的API进行网络状态管理
      • 向应用层反馈通信状态变化
  • 基础软件模式管理器(BswM)

    • 功能:基础软件状态协调
    • 职责:
      • 接收EthSM的状态通知
      • 协调其他BSW模块的状态
      • 实现系统级的模式管理
  • ECU状态管理器(EcuM)

    • 功能:ECU生命周期管理
    • 职责:负责EthSM模块的初始化
ECU抽象层
  • 以太网状态管理器(EthSM)
    • 功能:以太网网络状态管理的核心模块
    • 职责:
      • 实现网络模式状态机
      • 协调硬件和服务层状态
      • 提供错误处理和诊断支持
      • 管理配置参数

EthSM内部组件:

  • 网络模式状态机:实现6个状态的复杂状态转换逻辑
  • 错误处理:处理开发错误、运行时错误和生产错误
  • 配置管理:管理网络特定的配置参数

2.2 关键接口说明

上层接口
  • EthSM_RequestComMode():ComM调用以请求通信模式
  • EthSM_GetCurrentComMode():ComM调用以获取当前通信模式
  • BswM_EthSM_CurrentState():向BswM通知状态变化
下层接口
  • TcpIp_RequestComMode():向TcpIp模块请求状态变化
  • EthIf_SetControllerMode():控制以太网控制器模式
  • EthIf_GetControllerMode():获取以太网控制器状态
回调接口
  • EthSM_TcpIpModeIndication():TcpIp状态变化回调
  • EthSM_CtrlModeIndication():控制器状态变化回调
  • EthSM_TrcvLinkStateChg():收发器链路状态变化回调

2.3 代码示例

/* AUTOSAR EthSM模块接口定义 */
#include "EthSM.h"
#include "ComM.h"
#include "BswM.h"
#include "TcpIp.h"
#include "EthIf.h"/* EthSM状态类型定义 */
typedef enum {ETHSM_STATE_OFFLINE,           /* 离线状态 */ETHSM_STATE_WAIT_TRCVLINK,     /* 等待收发器链路 */ETHSM_STATE_WAIT_ONLINE,       /* 等待在线 */ETHSM_STATE_ONLINE,            /* 在线状态 */ETHSM_STATE_ONHOLD,            /* 保持状态 */ETHSM_STATE_WAIT_OFFLINE       /* 等待离线 */
} EthSM_NetworkModeStateType;/* EthSM配置结构体 */
typedef struct {NetworkHandleType networkHandle;        /* 网络句柄 */uint8 ethIfControllerId;               /* EthIf控制器ID */boolean demEventsConfigured;           /* DEM事件配置标志 */Dem_EventIdType linkDownEventId;      /* 链路断开事件ID */
} EthSM_NetworkConfigType;/* EthSM通信模式请求实现示例 */
Std_ReturnType EthSM_RequestComMode(NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode)
{EthSM_NetworkModeStateType currentState;Std_ReturnType result = E_NOT_OK;/* 参数检查 */if (EthSM_ModuleInitialized == FALSE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID, ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_UNINIT);return E_NOT_OK;}/* 验证网络句柄 */if (NetworkHandle >= ETHSM_NUMBER_OF_NETWORKS) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_INVALID_NETWORK_HANDLE);return E_NOT_OK;}/* 验证通信模式 */if ((ComM_Mode != COMM_NO_COMMUNICATION) && (ComM_Mode != COMM_FULL_COMMUNICATION)) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_REQUEST_COM_MODE, ETHSM_E_INVALID_NETWORK_MODE);return E_NOT_OK;}/* 获取当前状态 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);/* 状态机处理 */switch (ComM_Mode) {case COMM_FULL_COMMUNICATION:if (currentState == ETHSM_STATE_OFFLINE) {/* 启动以太网控制器 */result = EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId, ETH_MODE_ACTIVE);if (result == E_OK) {/* 更新请求的通信模式 */EthSM_Internal_SetRequestedComMode(NetworkHandle, ComM_Mode);/* 触发状态转换将在主函数中处理 */}}break;case COMM_NO_COMMUNICATION:if ((currentState == ETHSM_STATE_ONLINE) || (currentState == ETHSM_STATE_ONHOLD)) {/* 请求TcpIp离线 */result = TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);if (result == E_OK) {/* 更新请求的通信模式 */EthSM_Internal_SetRequestedComMode(NetworkHandle, ComM_Mode);/* 状态转换到WAIT_OFFLINE */EthSM_Internal_SetCurrentState(NetworkHandle, ETHSM_STATE_WAIT_OFFLINE);/* 通知BswM状态变化 */BswM_EthSM_CurrentState(NetworkHandle, ETHSM_STATE_WAIT_OFFLINE);}}break;default:/* 不支持的通信模式 */result = E_NOT_OK;break;}return result;
}/* EthSM主函数实现示例 */
void EthSM_MainFunction(void)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;ComM_ModeType requestedMode;/* 遍历所有配置的网络 */for (networkHandle = 0; networkHandle < ETHSM_NUMBER_OF_NETWORKS; networkHandle++) {currentState = EthSM_Internal_GetCurrentState(networkHandle);requestedMode = EthSM_Internal_GetRequestedComMode(networkHandle);/* 状态机处理 */switch (currentState) {case ETHSM_STATE_OFFLINE:/* 处理从离线到等待收发器链路的转换 */if (requestedMode == COMM_FULL_COMMUNICATION) {EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);}break;case ETHSM_STATE_WAIT_TRCVLINK:/* 等待收发器链路状态变化 */if (EthSM_Internal_IsTransceiverLinkActive(networkHandle)) {/* 请求TcpIp上线 */TcpIp_RequestComMode(EthSM_NetworkConfig[networkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);}break;case ETHSM_STATE_WAIT_ONLINE:/* 等待TcpIp状态变化 */if (EthSM_Internal_IsTcpIpOnline(networkHandle)) {EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_FULL_COMMUNICATION);}break;/* 其他状态处理... */default:break;}}
}

3. 网络模式状态机

在这里插入图片描述

3.1 状态机概述

EthSM为每个配置的网络句柄实现一个网络模式状态机,包含6个子状态,用于管理从无通信到全通信的完整生命周期。

3.2 状态详细说明

状态 ETHSM_STATE_OFFLINE
  • 含义:EthSM初始化时进入的状态,所有通信功能处于关闭状态
  • 特征
    • Controller Mode: DOWN
    • Transceiver Mode: DOWN
    • Transceiver Link: DOWN
    • TcpIP Address: OFFLINE
    • ComM Mode: No Communication
  • 进入条件
    • EthSM模块初始化
    • 从其他状态收到COMM_NO_COMMUNICATION请求后的最终状态
  • 退出条件:收到COMM_FULL_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_TRCVLINK
  • 含义:控制器已激活,等待收发器链路建立
  • 特征
    • Controller Mode: ACTIVE
    • Transceiver Mode: ACTIVE
    • Transceiver Link: DOWN
    • TcpIP Address: OFFLINE
    • ComM Mode: No Communication
  • 进入条件:从OFFLINE状态收到COMM_FULL_COMMUNICATION请求
  • 退出条件
    • 收发器链路变为ACTIVE状态
    • 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_ONLINE
  • 含义:收发器链路已建立,等待IP通信建立
  • 特征
    • Controller Mode: ACTIVE
    • Transceiver Mode: ACTIVE
    • Transceiver Link: ACTIVE
    • TcpIP Address: OFFLINE
    • ComM Mode: No Communication
  • 进入条件:从WAIT_TRCVLINK状态收到链路ACTIVE通知
  • 退出条件
    • TcpIp状态变为ONLINE
    • 收发器链路断开
    • 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_ONLINE
  • 含义:完全通信状态,所有条件满足
  • 特征
    • Controller Mode: ACTIVE
    • Transceiver Mode: ACTIVE
    • Transceiver Link: ACTIVE
    • TcpIP Address: ONLINE
    • ComM Mode: Full Communication
  • 进入条件:从WAIT_ONLINE状态收到TcpIp ONLINE通知
  • 退出条件
    • 收发器链路断开(转到ONHOLD)
    • TcpIp状态变为OFFLINE
    • 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_ONHOLD
  • 含义:链路断开但保持通信状态,用于快速恢复
  • 特征
    • Controller Mode: ACTIVE
    • Transceiver Mode: ACTIVE
    • Transceiver Link: DOWN
    • TcpIP Address: ONLINE
    • ComM Mode: Full Communication
  • 进入条件:从ONLINE状态收到链路DOWN通知
  • 退出条件
    • 收发器链路恢复ACTIVE
    • TcpIp状态变为OFFLINE
    • 收到COMM_NO_COMMUNICATION请求
状态 ETHSM_STATE_WAIT_OFFLINE
  • 含义:正在关闭通信,等待TcpIp离线确认
  • 特征
    • Controller Mode: ACTIVE
    • Transceiver Mode: ACTIVE
    • Transceiver Link: ACTIVE
    • TcpIP Address: ONLINE
    • ComM Mode: Full Communication
  • 进入条件:从ONLINE状态收到COMM_NO_COMMUNICATION请求
  • 退出条件:收到TcpIp OFFLINE确认

3.3 关键状态转换

转换 OFFLINE -> WAIT_TRCVLINK
  • 触发条件:EthSM_RequestComMode(COMM_FULL_COMMUNICATION)
  • 执行动作
    • EthIf_SetControllerMode(ETH_MODE_ACTIVE)
    • BswM_EthSM_CurrentState(ETHSM_STATE_WAIT_TRCVLINK)
转换 WAIT_TRCVLINK -> WAIT_ONLINE
  • 触发条件:EthSM_TrcvLinkStateChg(ETHTRCV_LINK_STATE_ACTIVE)
  • 执行动作
    • TcpIp_RequestComMode(TCPIP_STATE_ONLINE)
    • BswM_EthSM_CurrentState(ETHSM_STATE_WAIT_ONLINE)
转换 WAIT_ONLINE -> ONLINE
  • 触发条件:EthSM_TcpIpModeIndication(TCPIP_STATE_ONLINE)
  • 执行动作
    • BswM_EthSM_CurrentState(ETHSM_STATE_ONLINE)
    • ComM_BusSM_ModeIndication(COMM_FULL_COMMUNICATION)

3.4 代码示例

/* 状态机处理函数 */
void EthSM_Internal_StateMachineHandler(NetworkHandleType NetworkHandle)
{EthSM_NetworkModeStateType currentState;EthSM_NetworkModeStateType nextState;ComM_ModeType requestedMode;boolean stateChanged = FALSE;currentState = EthSM_Internal_GetCurrentState(NetworkHandle);requestedMode = EthSM_Internal_GetRequestedComMode(NetworkHandle);nextState = currentState;/* 状态转换逻辑 */switch (currentState) {case ETHSM_STATE_OFFLINE:if (requestedMode == COMM_FULL_COMMUNICATION) {/* 启动控制器 */if (EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_ACTIVE) == E_OK) {nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;}}break;case ETHSM_STATE_WAIT_TRCVLINK:if (requestedMode == COMM_NO_COMMUNICATION) {/* 关闭控制器 */EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;} else if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 请求TcpIp上线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);nextState = ETHSM_STATE_WAIT_ONLINE;stateChanged = TRUE;}break;case ETHSM_STATE_WAIT_ONLINE:if (requestedMode == COMM_NO_COMMUNICATION) {/* 请求TcpIp离线并关闭控制器 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;} else if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路断开,请求TcpIp离线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;} else if (EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp已上线 */nextState = ETHSM_STATE_ONLINE;stateChanged = TRUE;/* 通知ComM达到全通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_FULL_COMMUNICATION);}break;case ETHSM_STATE_ONLINE:if (requestedMode == COMM_NO_COMMUNICATION) {/* 请求TcpIp离线 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);nextState = ETHSM_STATE_WAIT_OFFLINE;stateChanged = TRUE;} else if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路断开,进入保持状态 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONHOLD);nextState = ETHSM_STATE_ONHOLD;stateChanged = TRUE;/* 报告链路断开事件 */if (EthSM_NetworkConfig[NetworkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[NetworkHandle].linkDownEventId,DEM_EVENT_STATUS_FAILED);}} else if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp离线 */nextState = ETHSM_STATE_WAIT_ONLINE;stateChanged = TRUE;/* 通知ComM失去通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_ONHOLD:if (requestedMode == COMM_NO_COMMUNICATION) {/* 完全关闭 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_OFFLINE);EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);} else if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {/* 链路恢复 */TcpIp_RequestComMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,TCPIP_STATE_ONLINE);nextState = ETHSM_STATE_ONLINE;stateChanged = TRUE;/* 清除链路断开事件 */if (EthSM_NetworkConfig[NetworkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[NetworkHandle].linkDownEventId,DEM_EVENT_STATUS_PASSED);}} else if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp离线 */nextState = ETHSM_STATE_WAIT_TRCVLINK;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_WAIT_OFFLINE:if (!EthSM_Internal_IsTcpIpOnline(NetworkHandle)) {/* TcpIp已离线,关闭控制器 */EthIf_SetControllerMode(EthSM_NetworkConfig[NetworkHandle].ethIfControllerId,ETH_MODE_DOWN);nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;/* 通知ComM无通信 */ComM_BusSM_ModeIndication(NetworkHandle, COMM_NO_COMMUNICATION);}break;default:/* 未知状态,复位到离线 */nextState = ETHSM_STATE_OFFLINE;stateChanged = TRUE;break;}/* 更新状态并通知BswM */if (stateChanged) {EthSM_Internal_SetCurrentState(NetworkHandle, nextState);BswM_EthSM_CurrentState(NetworkHandle, nextState);}
}/* 收发器链路状态变化回调 */
void EthSM_TrcvLinkStateChg(uint8 CtrlIdx, EthTrcv_LinkStateType TransceiverLinkState)
{NetworkHandleType networkHandle;/* 参数检查 */if (EthSM_ModuleInitialized == FALSE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_TRCV_LINK_STATE_CHG, ETHSM_E_UNINIT);return;}/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID,ETHSM_SID_TRCV_LINK_STATE_CHG, ETHSM_E_PARAM_CONTROLLER);return;}/* 更新链路状态 */EthSM_Internal_SetTransceiverLinkState(networkHandle, TransceiverLinkState);/* 触发状态机处理将在下一个主函数周期执行 */
}

4. 操作序列分析

在这里插入图片描述

4.1 序列图概述

该序列图展示了EthSM在不同场景下的操作序列,包括从无通信到全通信的转换、从全通信到无通信的转换,以及链路状态变化处理。

4.2 参与者说明

参与者 ComM
  • 角色:通信管理器,系统的通信协调中心
  • 职责
    • 接收应用层的通信请求
    • 向EthSM请求网络通信模式
    • 接收EthSM的模式指示回调
参与者 EthSM
  • 角色:以太网状态管理器,网络状态协调核心
  • 职责
    • 处理ComM的通信模式请求
    • 协调各层模块状态
    • 实现复杂的状态机逻辑
    • 向上层通知状态变化
参与者 BswM
  • 角色:基础软件模式管理器
  • 职责
    • 接收EthSM的状态通知
    • 协调系统级的模式管理
参与者 TcpIp
  • 角色:TCP/IP协议栈
  • 职责
    • 处理EthSM的状态请求
    • 向EthSM通知协议栈状态变化
参与者 EthIf
  • 角色:以太网接口,硬件抽象层
  • 职责
    • 执行EthSM的控制器操作请求
    • 向EthSM通知硬件状态变化

4.3 操作组详细分析

操作组 从无通信到全通信的转换
  • 场景:系统启动或应用请求建立网络通信
  • 触发条件:ComM收到应用层的全通信请求

关键步骤序列

  1. ComM -> EthSM: EthSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION)

    • 目的:请求建立全通信
    • 参数:网络句柄和通信模式
    • 返回:E_OK表示请求被接受
  2. EthSM -> EthIf: EthIf_SetControllerMode(CtrlIdx, ETH_MODE_ACTIVE)

    • 目的:激活以太网控制器
    • 参数:控制器索引和目标模式
    • 返回:操作结果
  3. EthIf -> EthSM: EthSM_CtrlModeIndication(CtrlIdx, ETH_MODE_ACTIVE)

    • 目的:确认控制器模式变化
    • 参数:控制器索引和当前模式
  4. EthSM -> BswM: BswM_EthSM_CurrentState(Network, ETHSM_STATE_WAIT_TRCVLINK)

    • 目的:通知状态机进入等待收发器链路状态
    • 参数:网络句柄和新状态
  5. EthIf -> EthSM: EthSM_TrcvLinkStateChg(NetworkHandle, ETHTRCV_LINK_STATE_ACTIVE)

    • 目的:通知收发器链路变为活动状态
    • 参数:网络句柄和链路状态
  6. EthSM -> TcpIp: TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE)

    • 目的:请求TcpIp协议栈上线
    • 参数:控制器索引和目标状态
  7. TcpIp -> EthSM: EthSM_TcpIpModeIndication(CtrlIdx, TCPIP_STATE_ONLINE)

    • 目的:确认TcpIp协议栈已上线
    • 参数:控制器索引和当前状态
  8. EthSM -> ComM: ComM_BusSM_ModeIndication(Channel, COMM_FULL_COMMUNICATION)

    • 目的:通知ComM已达到全通信状态
    • 参数:通道和通信模式
操作组 从全通信到无通信的转换
  • 场景:系统关闭或应用请求断开网络通信
  • 触发条件:ComM收到应用层的无通信请求
操作组 链路状态变化处理(ONHOLD状态)
  • 场景:网络通信过程中发生链路断开
  • 触发条件:物理链路断开但TcpIp会话仍需保持

4.4 函数详细说明

函数 EthSM_RequestComMode
  • 描述:ComM调用此函数请求EthSM改变网络通信模式,这是EthSM对外的主要API接口
  • 参数
    • NetworkHandle [输入]: 标识特定以太网网络的句柄, 类型: NetworkHandleType, 取值范围: 0到配置的网络数量-1
    • ComM_Mode [输入]: 请求的通信模式, 类型: ComM_ModeType, 取值范围: COMM_NO_COMMUNICATION或COMM_FULL_COMMUNICATION
  • 返回值
    • E_OK: 请求被接受,状态机将在下一个主函数周期处理
    • E_NOT_OK: 请求被拒绝,可能是参数无效或当前状态不允许
  • 相关函数
    • 上层: ComM_RequestComMode调用此函数
    • 下层: 此函数会调用EthIf_SetControllerMode和TcpIp_RequestComMode
    • 并列: EthSM_GetCurrentComMode提供状态查询功能
函数 EthSM_TrcvLinkStateChg
  • 描述:EthIf调用此函数通知EthSM收发器链路状态变化,是硬件状态向软件状态的关键桥梁
  • 参数
    • CtrlIdx [输入]: EthIf控制器索引,用于识别通信网络, 类型: uint8, 取值范围: 0-255
    • TransceiverLinkState [输入]: 收发器的实际链路状态, 类型: EthTrcv_LinkStateType, 取值范围: ETHTRCV_LINK_STATE_DOWN或ETHTRCV_LINK_STATE_ACTIVE
  • 返回值
    • 无返回值(void函数)
  • 相关函数
    • 上层: EthIf模块调用此函数
    • 下层: 此函数会触发状态机在主函数中的处理
    • 并列: EthSM_CtrlModeIndication处理控制器状态变化
函数 EthSM_TcpIpModeIndication
  • 描述:TcpIp模块调用此函数报告实际的TcpIp状态,确保状态机与协议栈状态同步
  • 参数
    • CtrlIdx [输入]: 控制器索引,标识TcpIp状态变化的网络, 类型: uint8, 取值范围: 0-255
    • TcpIpState [输入]: TcpIp模块的实际状态, 类型: TcpIp_StateType, 取值范围: TCPIP_STATE_OFFLINE, TCPIP_STATE_ONLINE, TCPIP_STATE_ONHOLD
  • 返回值
    • 无返回值(void函数)
  • 相关函数
    • 上层: TcpIp模块调用此函数
    • 下层: 此函数会触发状态机处理和ComM通知
    • 并列: EthSM_TrcvLinkStateChg处理链路层状态变化

4.5 代码示例

/* 完整的通信建立序列实现 */
Std_ReturnType EthSM_EstablishCommunication(NetworkHandleType NetworkHandle)
{EthSM_NetworkModeStateType currentState;uint8 ethIfCtrlIdx;Std_ReturnType result = E_NOT_OK;uint32 timeout = 0;const uint32 MAX_TIMEOUT = 1000; /* 最大等待时间(主函数周期数) *//* 获取当前状态 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);ethIfCtrlIdx = EthSM_NetworkConfig[NetworkHandle].ethIfControllerId;/* 只能从OFFLINE状态开始建立通信 */if (currentState != ETHSM_STATE_OFFLINE) {return E_NOT_OK;}/* 步骤1: 请求全通信模式 */result = EthSM_RequestComMode(NetworkHandle, COMM_FULL_COMMUNICATION);if (result != E_OK) {return result;}/* 等待状态转换到WAIT_TRCVLINK */timeout = 0;do {EthSM_MainFunction(); /* 触发状态机处理 */currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;} while ((currentState != ETHSM_STATE_WAIT_TRCVLINK) && (timeout < MAX_TIMEOUT));if (currentState != ETHSM_STATE_WAIT_TRCVLINK) {return E_NOT_OK; /* 超时 */}/* 步骤2: 等待收发器链路激活 *//* 这通常由硬件事件触发,这里模拟等待过程 */timeout = 0;do {EthSM_MainFunction();currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;/* 检查链路状态 */if (EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {break;}} while (timeout < MAX_TIMEOUT);if (!EthSM_Internal_IsTransceiverLinkActive(NetworkHandle)) {return E_NOT_OK; /* 链路建立失败 */}/* 步骤3: 等待TcpIp上线 */timeout = 0;do {EthSM_MainFunction();currentState = EthSM_Internal_GetCurrentState(NetworkHandle);timeout++;} while ((currentState != ETHSM_STATE_ONLINE) && (timeout < MAX_TIMEOUT));if (currentState == ETHSM_STATE_ONLINE) {return E_OK; /* 通信建立成功 */} else {return E_NOT_OK; /* 建立失败 */}
}/* 链路状态变化处理的完整实现 */
void EthSM_HandleLinkStateChange(uint8 CtrlIdx, EthTrcv_LinkStateType LinkState)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {return;}currentState = EthSM_Internal_GetCurrentState(networkHandle);/* 根据当前状态和链路状态处理 */switch (currentState) {case ETHSM_STATE_WAIT_TRCVLINK:if (LinkState == ETHTRCV_LINK_STATE_ACTIVE) {/* 链路建立,请求TcpIp上线 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);}break;case ETHSM_STATE_WAIT_ONLINE:if (LinkState == ETHTRCV_LINK_STATE_DOWN) {/* 链路断开,回到等待链路状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_OFFLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);}break;case ETHSM_STATE_ONLINE:if (LinkState == ETHTRCV_LINK_STATE_DOWN) {/* 链路断开,进入保持状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONHOLD);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONHOLD);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONHOLD);/* 报告生产错误 */if (EthSM_NetworkConfig[networkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[networkHandle].linkDownEventId,DEM_EVENT_STATUS_FAILED);}}break;case ETHSM_STATE_ONHOLD:if (LinkState == ETHTRCV_LINK_STATE_ACTIVE) {/* 链路恢复,回到在线状态 */TcpIp_RequestComMode(CtrlIdx, TCPIP_STATE_ONLINE);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);/* 清除生产错误 */if (EthSM_NetworkConfig[networkHandle].demEventsConfigured) {Dem_SetEventStatus(EthSM_NetworkConfig[networkHandle].linkDownEventId,DEM_EVENT_STATUS_PASSED);}}break;default:/* 其他状态下的链路变化暂时忽略 */break;}/* 更新内部链路状态记录 */EthSM_Internal_SetTransceiverLinkState(networkHandle, LinkState);
}/* TcpIp状态指示处理 */
void EthSM_ProcessTcpIpModeIndication(uint8 CtrlIdx, TcpIp_StateType TcpIpState)
{NetworkHandleType networkHandle;EthSM_NetworkModeStateType currentState;/* 查找对应的网络句柄 */networkHandle = EthSM_Internal_GetNetworkHandleByCtrlIdx(CtrlIdx);if (networkHandle == ETHSM_INVALID_NETWORK_HANDLE) {return;}currentState = EthSM_Internal_GetCurrentState(networkHandle);/* 根据当前状态和TcpIp状态处理 */switch (currentState) {case ETHSM_STATE_WAIT_ONLINE:if (TcpIpState == TCPIP_STATE_ONLINE) {/* TcpIp上线,进入在线状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_FULL_COMMUNICATION);}break;case ETHSM_STATE_ONLINE:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp离线,回到等待在线状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_ONLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_ONHOLD:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp离线,回到等待收发器链路状态 */EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_WAIT_TRCVLINK);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;case ETHSM_STATE_WAIT_OFFLINE:if (TcpIpState == TCPIP_STATE_OFFLINE) {/* TcpIp已离线,关闭控制器并进入离线状态 */EthIf_SetControllerMode(CtrlIdx, ETH_MODE_DOWN);EthSM_Internal_SetCurrentState(networkHandle, ETHSM_STATE_OFFLINE);BswM_EthSM_CurrentState(networkHandle, ETHSM_STATE_OFFLINE);ComM_BusSM_ModeIndication(networkHandle, COMM_NO_COMMUNICATION);}break;default:/* 其他状态下的TcpIp状态变化暂时忽略 */break;}/* 更新内部TcpIp状态记录 */EthSM_Internal_SetTcpIpState(networkHandle, TcpIpState);
}

5. 配置模型

5.1 配置模型概述

EthSM的配置模型定义了模块的静态配置结构,支持预编译时配置变体,包含全局配置参数和网络特定配置参数。

5.2 配置容器详细说明

类 EthSM
  • 功能:EthSM模块的根配置容器
  • 关键属性
    • description
      • 描述:配置容器的描述信息
      • 类型:字符串
      • 取值范围:固定值"Configuration of the Ethernet State Manager"
      • 默认值:N/A
      • 约束:不可修改
      • 来源:AUTOSAR规范定义
    • supportedConfigVariants
      • 描述:支持的配置变体类型
      • 类型:枚举
      • 取值范围:VARIANT-PRE-COMPILE
      • 默认值:VARIANT-PRE-COMPILE
      • 约束:当前版本仅支持预编译配置
      • 来源:AUTOSAR BSW通用要求
    • postBuildVariantSupport
      • 描述:是否支持构建后配置变体
      • 类型:布尔值
      • 取值范围:true/false
      • 默认值:false
      • 约束:当前版本不支持构建后配置
      • 来源:模块实现限制
类 EthSMGeneral
  • 功能:包含EthSM的全局配置参数
  • 关键属性
    • description
      • 描述:全局参数容器的说明
      • 类型:字符串
      • 取值范围:固定值"This container contains the global parameter of the Ethernet State Manager"
      • 默认值:N/A
      • 约束:描述性文本,不可配置
      • 来源:AUTOSAR规范要求
    • multiplicity
      • 描述:容器的多重性
      • 类型:整数
      • 取值范围:1
      • 默认值:1
      • 约束:每个EthSM模块只能有一个全局配置容器
      • 来源:模块架构设计
类 EthSMNetwork
  • 功能:包含以太网网络特定的配置参数
  • 关键属性
    • description
      • 描述:网络配置容器的说明
      • 类型:字符串
      • 取值范围:固定值"This container contains the Ethernet network-specific parameters"
      • 默认值:N/A
      • 约束:描述性文本
      • 来源:AUTOSAR规范要求
    • multiplicity
      • 描述:容器的多重性
      • 类型:范围
      • 取值范围:1…*
      • 默认值:N/A
      • 约束:至少需要配置一个网络,支持多个网络
      • 来源:多网络支持需求

5.3 配置参数详细说明

类 EthSMDevErrorDetect
  • 功能:控制开发错误检测和通知的开关
  • 关键属性
    • name
      • 描述:参数名称标识符
      • 类型:字符串
      • 取值范围:固定值"EthSMDevErrorDetect"
      • 默认值:N/A
      • 约束:符合AUTOSAR命名规范
      • 来源:AUTOSAR BSW通用要求
    • type
      • 描述:参数数据类型
      • 类型:类型定义
      • 取值范围:EcucBooleanParamDef
      • 默认值:N/A
      • 约束:必须是布尔类型
      • 来源:AUTOSAR ECUC规范
    • defaultValue
      • 描述:参数的默认值
      • 类型:布尔值
      • 取值范围:true/false
      • 默认值:false
      • 约束:开发阶段建议设为true,生产阶段设为false
      • 来源:性能和调试需求平衡
    • scope
      • 描述:参数的作用域
      • 类型:枚举
      • 取值范围:local/global
      • 默认值:local
      • 约束:仅影响本模块
      • 来源:模块封装原则
类 EthSMMainFunctionPeriod
  • 功能:指定主函数的调用周期
  • 关键属性
    • type
      • 描述:参数数据类型
      • 类型:类型定义
      • 取值范围:EcucFloatParamDef
      • 默认值:N/A
      • 约束:必须是浮点数类型
      • 来源:时间精度要求
    • range
      • 描述:参数的有效取值范围
      • 类型:数值范围
      • 取值范围:]0 … INF[
      • 默认值:N/A
      • 约束:必须大于0,单位为秒
      • 来源:系统实时性要求
类 EthSMComMNetworkHandleRef
  • 功能:引用ComM模块的网络句柄
  • 关键属性
    • type
      • 描述:引用类型
      • 类型:符号名引用
      • 取值范围:Symbolic name reference to [ComMChannel]
      • 默认值:N/A
      • 约束:必须引用有效的ComM通道
      • 来源:模块间接口一致性要求
    • multiplicity
      • 描述:引用的多重性
      • 类型:整数
      • 取值范围:1
      • 默认值:N/A
      • 约束:每个EthSM网络必须对应一个ComM通道
      • 来源:一对一映射关系

5.4 状态枚举说明

类 EthSM_NetworkModeStateType
  • 功能:定义网络模式状态机的所有状态
  • 关键属性
    • ETHSM_STATE_OFFLINE
      • 描述:EthSM初始化时的状态
      • 类型:枚举值
      • 取值范围:0
      • 默认值:N/A
      • 约束:系统启动时的默认状态
      • 来源:状态机设计
    • ETHSM_STATE_WAIT_TRCVLINK
      • 描述:ComM请求COMM_FULL_COMMUNICATION时进入的状态
      • 类型:枚举值
      • 取值范围:1
      • 默认值:N/A
      • 约束:控制器已激活但链路未建立
      • 来源:硬件激活序列
    • ETHSM_STATE_ONLINE
      • 描述:IP通信可用时的状态
      • 类型:枚举值
      • 取值范围:3
      • 默认值:N/A
      • 约束:所有通信条件满足
      • 来源:全通信状态定义

5.5 关系说明

关系 EthSM–EthSMGeneral
  • 关系类型:组合关系(包含)
  • 多重性:1对1
  • 业务含义:每个EthSM模块包含一个全局配置容器
关系 EthSM–EthSMNetwork
  • 关系类型:组合关系(包含)
  • 多重性:1对多(1…*)
  • 业务含义:每个EthSM模块可以包含多个网络配置,支持多网络环境
关系 EthSMComMNetworkHandleRef–ComMChannel
  • 关系类型:引用关系
  • 多重性:1对1
  • 业务含义:EthSM网络配置必须引用有效的ComM通道配置

5.6 代码示例

/* AUTOSAR EthSM配置数据结构定义 *//* 全局配置参数结构 */
typedef struct {boolean devErrorDetect;          /* 开发错误检测开关 */float32 mainFunctionPeriod;      /* 主函数周期(秒) */boolean dummyMode;               /* 虚拟模式开关 */boolean versionInfoApi;          /* 版本信息API开关 */
} EthSM_GeneralConfigType;/* DEM事件参数引用结构 */
typedef struct {boolean configured;              /* 是否配置了DEM事件 */Dem_EventIdType linkDownEventId; /* 链路断开事件ID */
} EthSM_DemEventParameterRefsType;/* 网络特定配置结构 */
typedef struct {NetworkHandleType commNetworkHandleRef;    /* ComM网络句柄引用 */uint8 ethIfControllerRef;                  /* EthIf控制器引用 */EthSM_DemEventParameterRefsType demEventParameterRefs; /* DEM事件参数引用 */
} EthSM_NetworkConfigType;/* EthSM完整配置结构 */
typedef struct {EthSM_GeneralConfigType general;           /* 全局配置 */uint8 numberOfNetworks;                    /* 网络数量 */EthSM_NetworkConfigType* networkConfigs;   /* 网络配置数组 */
} EthSM_ConfigType;/* 配置数据实例 */
const EthSM_GeneralConfigType EthSM_GeneralConfig = {.devErrorDetect = TRUE,        /* 开发阶段启用错误检测 */.mainFunctionPeriod = 0.01f,   /* 10ms周期 */.dummyMode = FALSE,            /* 非虚拟模式 */.versionInfoApi = TRUE         /* 启用版本信息API */
};const EthSM_DemEventParameterRefsType EthSM_Network0_DemEvents = {.configured = TRUE,.linkDownEventId = DemConf_DemEventParameter_EthSM_E_LINK_DOWN_Network0
};const EthSM_NetworkConfigType EthSM_NetworkConfigs[ETHSM_NUMBER_OF_NETWORKS] = {{.commNetworkHandleRef = ComMConf_ComMChannel_EthNetwork0,.ethIfControllerRef = EthIfConf_EthIfController_EthController0,.demEventParameterRefs = EthSM_Network0_DemEvents},/* 可以添加更多网络配置 */
};const EthSM_ConfigType EthSM_Config = {.general = EthSM_GeneralConfig,.numberOfNetworks = ETHSM_NUMBER_OF_NETWORKS,.networkConfigs = (EthSM_NetworkConfigType*)EthSM_NetworkConfigs
};/* 配置访问函数 */
boolean EthSM_IsDevErrorDetectEnabled(void)
{return EthSM_Config.general.devErrorDetect;
}float32 EthSM_GetMainFunctionPeriod(void)
{return EthSM_Config.general.mainFunctionPeriod;
}NetworkHandleType EthSM_GetComMNetworkHandle(NetworkHandleType EthSMNetworkHandle)
{if (EthSMNetworkHandle < EthSM_Config.numberOfNetworks) {return EthSM_Config.networkConfigs[EthSMNetworkHandle].commNetworkHandleRef;}return COMM_INVALID_NETWORK_HANDLE;
}uint8 EthSM_GetEthIfControllerIndex(NetworkHandleType EthSMNetworkHandle)
{if (EthSMNetworkHandle < EthSM_Config.numberOfNetworks) {return EthSM_Config.networkConfigs[EthSMNetworkHandle].ethIfControllerRef;}return ETHIF_INVALID_CONTROLLER_IDX;
}/* 配置验证函数 */
Std_ReturnType EthSM_ValidateConfiguration(const EthSM_ConfigType* ConfigPtr)
{uint8 networkIndex;/* 检查配置指针 */if (ConfigPtr == NULL) {return E_NOT_OK;}/* 检查全局配置 */if (ConfigPtr->general.mainFunctionPeriod <= 0.0f) {return E_NOT_OK; /* 主函数周期必须大于0 */}/* 检查网络数量 */if ((ConfigPtr->numberOfNetworks == 0) || (ConfigPtr->numberOfNetworks > ETHSM_MAX_NUMBER_OF_NETWORKS)) {return E_NOT_OK;}/* 检查网络配置数组 */if (ConfigPtr->networkConfigs == NULL) {return E_NOT_OK;}/* 验证每个网络配置 */for (networkIndex = 0; networkIndex < ConfigPtr->numberOfNetworks; networkIndex++) {const EthSM_NetworkConfigType* networkConfig = &ConfigPtr->networkConfigs[networkIndex];/* 检查ComM网络句柄引用 */if (networkConfig->commNetworkHandleRef >= COMM_NUMBER_OF_CHANNELS) {return E_NOT_OK;}/* 检查EthIf控制器引用 */if (networkConfig->ethIfControllerRef >= ETHIF_NUMBER_OF_CONTROLLERS) {return E_NOT_OK;}/* 检查DEM事件配置 */if (networkConfig->demEventParameterRefs.configured) {if (networkConfig->demEventParameterRefs.linkDownEventId >= DEM_NUMBER_OF_EVENTS) {return E_NOT_OK;}}}return E_OK; /* 配置验证通过 */
}/* 配置初始化函数 */
void EthSM_InitializeFromConfig(const EthSM_ConfigType* ConfigPtr)
{uint8 networkIndex;/* 验证配置 */if (EthSM_ValidateConfiguration(ConfigPtr) != E_OK) {/* 配置无效,使用默认配置或报告错误 */Det_ReportError(ETHSM_MODULE_ID, ETHSM_INSTANCE_ID, ETHSM_SID_INIT, ETHSM_E_PARAM_CONFIG);return;}/* 初始化全局状态 */EthSM_ModuleInitialized = FALSE;EthSM_ConfigPtr = ConfigPtr;/* 初始化每个网络的状态 */for (networkIndex = 0; networkIndex < ConfigPtr->numberOfNetworks; networkIndex++) {EthSM_Internal_InitializeNetwork(networkIndex);}/* 标记模块已初始化 */EthSM_ModuleInitialized = TRUE;
}

6. API规范

6.1 主要API函数

6.1.1 初始化函数

EthSM_Init()

  • 功能:初始化EthSM模块
  • 语法void EthSM_Init(void)
  • 参数:无
  • 返回值:无
  • 说明:该函数初始化EthSM模块,必须在使用其他API之前调用
6.1.2 通信模式管理

EthSM_RequestComMode()

  • 功能:请求网络通信模式
  • 语法Std_ReturnType EthSM_RequestComMode(NetworkHandleType NetworkHandle, ComM_ModeType ComM_Mode)
  • 参数
    • NetworkHandle:目标网络句柄
    • ComM_Mode:请求的通信模式
  • 返回值
    • E_OK:请求被接受
    • E_NOT_OK:请求被拒绝
  • 错误条件
    • ETHSM_E_UNINIT:模块未初始化
    • ETHSM_E_INVALID_NETWORK_HANDLE:无效的网络句柄
    • ETHSM_E_INVALID_NETWORK_MODE:无效的通信模式

EthSM_GetCurrentComMode()

  • 功能:获取当前网络通信模式
  • 语法Std_ReturnType EthSM_GetCurrentComMode(NetworkHandleType NetworkHandle, ComM_ModeType* ComM_ModePtr)
  • 参数
    • NetworkHandle:网络句柄
    • ComM_ModePtr:输出当前通信模式的指针
  • 返回值
    • E_OK:服务成功
    • E_NOT_OK:服务失败

6.2 回调函数

6.2.1 硬件状态回调

EthSM_CtrlModeIndication()

  • 功能:控制器模式变化通知
  • 语法void EthSM_CtrlModeIndication(uint8 CtrlIdx, Eth_ModeType CtrlMode)
  • 参数
    • CtrlIdx:控制器索引
    • CtrlMode:当前控制器模式

EthSM_TrcvLinkStateChg()

  • 功能:收发器链路状态变化通知
  • 语法void EthSM_TrcvLinkStateChg(uint8 CtrlIdx, EthTrcv_LinkStateType TransceiverLinkState)
  • 参数
    • CtrlIdx:控制器索引
    • TransceiverLinkState:收发器链路状态
6.2.2 协议栈状态回调

EthSM_TcpIpModeIndication()

  • 功能:TcpIp状态变化通知
  • 语法void EthSM_TcpIpModeIndication(uint8 CtrlIdx, TcpIp_StateType TcpIpState)
  • 参数
    • CtrlIdx:控制器索引
    • TcpIpState:TcpIp状态

6.3 调度函数

EthSM_MainFunction()

  • 功能:EthSM主函数,执行状态机处理
  • 语法void EthSM_MainFunction(void)
  • 参数:无
  • 返回值:无
  • 说明:该函数必须周期性调用,处理状态机转换和内部逻辑

7. 错误处理机制

7.1 错误分类

7.1.1 开发错误
  • ETHSM_E_UNINIT (0x02):模块未初始化
  • ETHSM_E_INVALID_NETWORK_HANDLE (0x04):无效的网络句柄
  • ETHSM_E_PARAM_POINTER (0x03):参数列表中的无效指针
  • ETHSM_E_INVALID_NETWORK_MODE (0x01):无效的通信模式
  • ETHSM_E_PARAM_CONTROLLER (0x07):无效的控制器参数
  • ETHSM_E_INVALID_TCP_IP_MODE (0x05):无效的TcpIp状态
7.1.2 生产错误
  • ETHSM_E_LINK_DOWN:链路断开检测
    • 检测条件:收发器从"up"状态切换到"down"状态时报告
    • 报告时机
      • FAIL:从ETHSM_STATE_ONLINE转换到ETHSM_STATE_ONHOLD时
      • PASS:从ETHSM_STATE_ONHOLD转换到ETHSM_STATE_ONLINE时
    • 监控频率:连续监控
    • 推荐DTC:N/A

7.2 错误处理策略

  1. 开发错误:通过DET模块报告,用于开发和调试阶段
  2. 生产错误:通过DEM模块报告,用于生产环境的故障诊断
  3. 错误恢复:EthSM实现自动错误恢复机制,如链路断开后的自动重连

8. 总结

8.1 EthSM的优势

  1. 标准化接口

    • 提供AUTOSAR标准化的以太网状态管理接口
    • 确保不同供应商模块间的兼容性
    • 简化系统集成复杂度
  2. 灵活的状态管理

    • 6状态状态机覆盖所有通信场景
    • 支持快速链路恢复(ONHOLD状态)
    • 优雅的错误处理和恢复机制
  3. 多网络支持

    • 支持多个独立以太网网络
    • 每个网络独立的状态管理
    • 支持VLAN等虚拟网络技术

8.2 应用场景

  1. 车载以太网通信

    • 信息娱乐系统网络管理
    • ADAS系统高带宽数据传输
    • 车载诊断和远程升级
  2. 工业以太网应用

    • 实时控制网络管理
    • 设备间高速数据交换
    • 分布式系统协调
  3. 嵌入式网络系统

    • IoT设备网络连接管理
    • 边缘计算节点通信
    • 系统级网络状态协调

EthSM作为AUTOSAR架构中的关键组件,为复杂的以太网通信系统提供了可靠、标准化的状态管理解决方案,是现代车载和工业网络系统不可或缺的基础软件模块。

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

相关文章:

  • 【PHP】Hyperf:接入 Nacos
  • 今日Java高频难点面试题推荐(2025年8月17日)
  • Python数据类型转换详解:从基础到实践
  • 【Kubernetes系列】Kubernetes中的resources
  • Matlab数字信号处理——ECG心电信号处理心率计算
  • FreeRTOS 中的守护任务(Daemon Task)
  • 第七十七章:多模态推理与生成——开启AI“从无到有”的时代!
  • 【C++知识杂记2】free和delete区别
  • c++--文件头注释/doxygen
  • Linux应用软件编程---多任务(线程)(线程创建、消亡、回收、属性、与进程的区别、线程间通信、函数指针)
  • 工作八年记
  • 官方正版在线安装office 365安装工具
  • 数组的三种主要声明方式
  • 大模型对齐算法(二): TDPO(Token-level Direct Preference Optimization)
  • Android中使用Compose实现各种样式Dialog
  • tcp会无限次重传吗
  • Eclipse Tomcat Configuration
  • Portkey-AI gateway 的一次“假压缩头”翻车的完整排障记:由 httpx 解压异常引发的根因分析
  • 学习日志36 python
  • 力扣经典算法篇-52-零钱兑换(动态规划)
  • Java语法进阶之常用类
  • 【C2000】德州仪器C2000产品整体介绍
  • http工作流程
  • LangChain 多任务应用开发
  • matlab tlc的文件、字符串操作
  • Python @staticmethod 装饰器与 staticmethod() 函数
  • Tomcat Session Replication Cluster:实现高可用性和可扩展性的关键
  • 机试备考笔记 14/31
  • Ugit使用记录
  • Next.js跟React关系(Next.js是基于React库的全栈框架)(文件系统路由、服务端渲染SSR、静态生成SSG、增量静态再生ISR、API路由)