ComM模块配置以及代码执行流程
1、基本的一个通道的配置列表
ComMNmVariant 概念的个人理解:
FULL: 完全按照AUTOSAR NM方式进行调用
LIGHT :设置一个超时时间,在请求停止通信的时候开始计时,超时之后才会进入FULLCOM_ReadySleep状态。
NONE:设置一个超时时间,通常设置成很小的一个数,这个代码的实现我理解是ECU上电的一个时间,如果设置成10分钟,那在ECU上电初始化后的10分钟以内请求NOCOM是无效的,所以正常情况下用不到这个就不用设置那么大。
2、生成的对应的通道的代码
ComMNmVariant_en = FULL
NmLightTimeout_u32 = 200
TMinFullComModeDuration_u16 = 1
3、ComM_RequestComMode
在这个函数里面读取原来的用户的模式请求,并且存储当前的用户模式请求,如果用户模式发生了变化,就会更新成当前的请求。
4、ComM_Prv_UpdateUserRequest
如果是 COMM_FULL_COMMUNICATION,则RequestCounter++;
如果是COMM_NO_COMMUNICATION,则 RequestCounter–;
而且这两个要按对使用。 ,否则会报DET错误。
5、ComM_Prv_ChannelMainFunction
ComM对应的通道的主函数
初始化时
channelState_en = channelRamPtr_pst->ChannelState_e = COMM_NO_COM_NO_PENDING_REQUEST;
channelMode_tu8 = channelRamPtr_pst->ChannelMode_u8 = COMM_NO_COMMUNICATION ;
busSmMode_tu8 = channelRamPtr_pst->BusSmMode_u8 = COMM_NO_COMMUNICATION;
previousstate_en = channelState_en;
6、ComM_Prv_ModeHandling
第一次调用entryToMode_b = FALSE
获取当前busSM状态,如果不一致产生RequestBusSm请求,第一次时都属于NOCOM状态,不执行任何东西,第一次正常退出。
7、ComM_Prv_NoComNoPending_StateHandling
channelState_en = COMM_NO_COM_REQUEST_PENDING
8、ComM_Prv_NoComPending_StateHandling
假设已经在allow之后,channelState_en = COMM_FULL_COM_NETWORK_REQUESTED
9、ComM_Prv_FullComNetworkReq_StateHandling
如果ComM为FULL通道,这个时候发起网络其请求,如果时NONE,才存储当前的TMinFullComModeDuration_u16时间。
10、切换到FULLCOM
11、请求BusSm进入FullCom状态
ComM_Prv_ModeHandling