ComMGeneral:ComM模块的通用配置参数。
2.1ComMGeneral
ComMGeneral主要包含ComM的一些通用配置。
ComMDirectUserMapping:配置是否让工具自动为每个ComMChannel映射ComMUser句柄(handler)。
ComMEcuGroupClassification:配置模式抑制(modeinhibition)是否会影响到ECU。
ComMModeLimitationEnabled:配置模式限制(modelimitation)是否被使能(enableordisable)。
ComMPncGatewayEnabled:局部网络网关是否被使能。
ComMPncSupport:配置是否支持局部网络功能。
ComMSynchronousWakeUp:配置是否支持通道同步唤醒(一个通道被唤醒则所有通道就被唤醒)。
ComMWakeupInhibitionEnabled:配置是否支持唤醒抑制(wakeupinhibition)功能。
2.2ComMConfigSet
ComMConfigSet主要包括以下三个配置container。
ComMChannel:此容器包含总线通道的配置(参数)。信道参数应在整个通信堆栈内协调一致。
ComMPnc:该容器包含部分网络集群(PNC)的配置。
ComMUser:这个容器包含一个标识符列表,这些标识符用于引用系统中指定请求通信模式的用户。
2.2.1ComMUser
ComMUserIdentifier:一种标识符,用于引用系统中指定请求通信模式的用户。ImplementationType:ComM_UserHandleType
用户的概念与ECUStateManager规范中的请求者的概念非常相似。
ComMUserEcucPartitionRef:表示请求程序在其中执行“EcucPartition”。当分区停止时,ComM中的通信请求将被取消,以避免由于分区停止而导致总线保持唤醒,这个参数基本不使用,也不配置。
此容器包含总线通道的配置(参数)。信道参数应在整个通信堆栈内协调一致。
ComMBusType:总线类型,包括:COMM_BUS_TYPE_CAN,COMM_BUS_TYPE_CDD,COMM_BUS_TYPE_ETH,COMM_BUS_TYPE_FR,COMM_BUS_TYPE_INTERNAL,COMM_BUS_TYPE_LIN六种类型。
ComMCDDBusPrefix:调用复杂驱动(CDD)的API时需要加上的前缀。
ComMChannelId:总线通道ID。
ComMMainFunctionPeriod:ComMMainFucntion调度周期。
ComMChannel:配置是否允许切换ComM通道状态到COMM_SILENT_COMMUNICATION或者COMM_FULL_COMMUNICATION。在ECU运行时可以通过以下API改变这个配置参数。
ECU/Allchannels:ComM_LimitECUToNoComMode().
Separatechannels:ComM_LimitChannelToNoComMode().
ComMNoWakeup:配置ECU是否不允许唤醒该通道。
ComMNoWakeUpInhibitionNvmStorage:如果该参数设置为true,则通道的NoWakeUp抑制状态将存储在ComMGlobalNvmBlockDescriptor所指向的块中(以某种具体实现的方式)。
ComMPncGatewayType:定义该通道局部网络网关行为。
ComMNetworkManagement:ComMChannel的子Container,该容器包含网络管理的配置参数。
ComMUserPerChannel:ComMChannel的子Container,这个容器包含一个标识符列表,这些标识符用于引用链接到通道的系统中的用户。
2.2.2.1ComMNetworkManagement
ComMNmVariant:定义网络管理的功能。应与NM配置相协调。
FULL:AUTOSARNM可用(默认)。
LIGHT:没有AUTOSARNM可用,但有关闭通道的功能。
NONE:不使用NM网络管理。
PASSIVE:AUTOSARNM运行在被动模式可用。
如果ComMBusType=COMM_BUS_TYPE_INTERNAL则ComMNmVariant应该被配置为NONE。
ComMPncNmRequest:如果这个参数等于true,那么每次由于PNC状态机改变为COMM_PNC_REQUESTED而请求FULLCommunication时,Nm将使用APINm_NetworkRequest调用。
2.2.2.2ComMUserPerChannel
ComMUserPerChannel:引用此通道用户对应的ComMUser。
2.2.3ComMPnc
ComMPncId:定义局部网络ID
ComMChannelPerPnc:局部网络中的ComMChannel。
ComMPncEthIfSwitchPortGroupRef:引用与此PNC对应的PortGroups。
ComMPncComSignal:表示PNC通信信号,用于通信该PNC的EIRA和ERA状态。
3.ComM模块代码分析
3.1重要数据结构分析
(1)配置代码
配置项结构体:
在ComM_PBcfg.c里面定义了每一个通道配置的具体实现。
(2)模块的实时状态数据结构
每个通道都会有一个实时的状态机,以及一些运行中的实时状态,这些状态一般保存在一个全局数据结构当中。
ComM.c中
这些全局变量是我们在调试ComM的时候需要观测的重要数据结构,通常在排查问题的时候,我们仅仅需要观测这几个全局变量。
3.2主逻辑代码分析
ComM_Main.c
ComM_Prv_ChannelMainFunction函数中的逻辑一句话概括就是:根据配置走不同的分支,根据实时请求切换状态并执行响应动作。
3.3接口/回调函数使用分析
ComM_Nm_NetworkStartIndication函数最主要的就是根据配置,更新通道状态结构体变量中的PassiveRequestState_u8变量。
审核编辑:刘清
原文标题:AUTOSARComM功能及配置参数详解
长沙市望城经济技术开发区航空路6号手机智能终端产业园2号厂房3层(0731-88081133)