目 录CONTENT

文章目录

AUTOSAR - CANSM - 学习三 :CANSM状态机解读

moke
2024-07-26 / 0 评论 / 0 点赞 / 34 阅读 / 0 字

1、概述

下面的图指定了CanSM模块的行为状态机,该模块将用于每个配置的CAN网络。

上下文中经常出现的几个缩写解释

INDICATED:表示验证的意思,

WUVALIDATION 表示唤醒验证

BOR表示bus-off recovery

CC表示CAN Controller

 注意哪些是Trigger,哪些是Guarding condition,哪些是Effect

2、状态步骤解析

2.1、Trigger :PowerOn

        刚上电的时候,状态机应该处于CANSM_BSM_NOT_INITIALIZED

2.2、Trigger :CanSM_Init

     如果请求使用CanSM_Init功能的CanSM模块,那么这将触发所有配置的CanSM状态机。

2.3、Trigger :T_START_WAKEUP_SOURCE

           假设存在唤醒事件,CanSM_StartWakeUpSource应该被ECUM调用,当CanSM_StartWakeUpSource返回值为E_OK,CanSM的状态机应该进入T_STOP_WAKEUP_SOURCE。

2.4、Trigger :T_STOP_WAKEUP_SOURCE

        假设存在唤醒事件,CanSM_StopWakeUpSource应该被ECUM调用,当CanSM_StopWakeUpSource返回值为E_OK,CanSM的状态机应该进入T_STOP_WAKEUP_SOURCE。

2.5、Trigger :T_FULL_COM_MODE_REQUEST

        通过ComM调用接口CanSM_RequestComMode,假设ComM_Mode 等于

 COMM_FULL_COMMUNICATION,应该触发状态机到T_FULL_COM_MODE_REQUEST状态,前提是对应的调用到对应的句柄参数。

2.6、Trigger :T_NO_COM_MODE_REQUEST

        通过ComM调用接口CanSM_RequestComMode,假设ComM_Mode 等于

 COMM_NO_COMMUNICATION,应该触发状态机到T_NO_COM_MODE_REQUEST状态,前提是对应的调用到对应的句柄参数。

2.7、Trigger :T_BUS_OFF

        这个回调函数将CanSM通知一个特定的控制器的总线事件,它需要考虑对受影响的CAN网络的指定的总线恢复处理。此处理应是一个触发形式。

        此处有一个回调函数CanSM_ControllerBusOff以供Canif使用,来通知上层已经发生了BusOff,假设工程仅仅包含XCP,个人觉得并不一定需要此模块,因为XCP的路线是CanIf –> XCP

2.8、Trigger :T_REPEAT_MAX

        如果状态机CANSM_BSM(参考上图)在它的一个子状态机中重复了Canlf API来启动CAN网络的CAN控制器,而没有得到返回值E_OK,也没有得到假定的模式指示,这将触发状态机CANSM_BSM与T_REPEAT_MAX。

2.9、Guarding condition: G_FULL_COM_MODE_REQUESTED

        Guarding condition 字面意思保护条件,个人理解是检测条件

G_个人理解是获取的意思。规范解释 如果最新接受的通信模式请求是CanSM_RequestComMode anSM_BSM的状态机应该获取状态信息G_FULL_COM_MODE_REQUESTED。

2.10、Guarding condition: G_SILENT_COM_MODE_REQUESTED

        规范解释 如果最新接受的通信模式请求是CanSM_RequestComMode anSM_BSM的状态机应该获取状态信息G_SILENT_COM_MODE_REQUESTED。

2.11、Effect: E_PRE_NOCOM

Effect:效果

要使CanSM_BSM状态机的变为E_PRE_NOCOM的状态效果,需要调用相应的CAN网络API。BswM_CanSM_CurrentState对应的参数 Network  = CanSMComMNetworkHandleRef (泛指参考参数)并且 CurrentState =  CANSM_BSWM_NO_COMMUNICATION(确定参数就是这个)。

注意此处是CanSM调用BswM_CanSM.c里面的函数,如下。

 2.12、Effect: E_NOCOM

        CanSM_BSM状态机的效果E_NOCOM应改变内部存储的网络模式,当CAN网络是COMM_NO_COMMUNICATION。

2.13、Effect: E_FULL_COM

        假设ECU尚未启动,应该在第一时间调用CanIf_SetPduMode接口,使响应的节点处于CANIF_ONLINE状态,此处呼应之前说的CanSM其实就是调用CanIf的接口讲法。

        假设ECU启动,应该在第一时间调用CanIf_SetPduMode接口,使响应的节点处于CANIF_TX_OFFLINE_ACTIVE状态,此处呼应之前说的CanSM其实就是调用CanIf的接口讲法。

        考虑到上述假设ECU尚未启动需求,需要对当前的网络节点调用ComM_BusSM_ModeIndication接口使其处于COMM_FULL_COMMUNICATION,

        考虑到上一条需求,状态机到E_FULL_COM需要调用BswM_CanSM_CurrentState,使其当前状态CANSM_BSWM_FULL_COMMUNICATION

2.14、Effect: E_FULL_TO_SILENT_COM

        要使状态机进入E_FULL_TO_SILENT_COM,第一时间处需要调用函数BswM_CanSM_CurrentState,根据代码个人理解上是通知BSWM,作为PRE_NOCOM之前的动作。

         第二步调用CanIf_SetPduMode使通信处于CANIF_TX_OFFLIN,然后再调用ComM_BusSM_ModeIndication到COMM_SILENT_COMMUNICATION。

2.15、Effect: E_BR_END_FULL_COM

一般effect是与T和G同时出现的,在他们后面

E_BR_END_FULL_COM与E_FULL_COM一样。

2.16、Effect: E_BR_END_SILENT_COM

         E_BR_END_SILENT_COM与E_FULL_TO_SILENT_COM一样。

2.17、Effect: E_SILENT_TO_FULL_COM

        E_SILENT_TO_FULL_COM与E_FULL_COM一样。

博主关闭了所有页面的评论