Lemonade
Published on 2025-04-13 / 8 Visits
0
0

Autosar应用开发笔记

BswM模块与诊断相关的规则

  • 通过28服务,Dcm可以控制Com模块对应用报文的收发(使能与否),可以控制Nm模块对网络管理报文的收发(使能与否)等。

    • 在BswM模块中,配置一个ModeRequestPort,它用于BswM得知Dcm欲请求何种通信模式。它会选择ComM中的一个通道,并且选择一个该Port的初始值。

    • 在BswM模块中,配置一些ModeCondition,它用于表示上面ModeRequestPort处于某种状态(值)时的ModeCondition。

    • 在BswM模块中,配置一些ModeExpression,它用于组合上面的ModeCondition条件。通过ModeExpression,一个Rule就拥有了一个判断原则。在满足或不满足判断原则时,可以执行一个ActionList,见下文描述。

    • 在BswM模块中,配置一些Action,它用于BswM执行(请求)的一个基本动作。

    • 在BswM模块中,配置一个ActionList,它用于组合上面的Action动作。

CanNm唤醒相关的流程

  • 初始化后,CanSm将CanDrv依次设置为STOP->SLEEP,以便CanDrv能够收到报文后产生唤醒中断。该流程也适用于COMM_NO_COMMUNICATION请求(后的流程)。

  • CanDrv收到报文后,产生唤醒中断,调用EcuM_CheckWakeup(由用户实现,其中调用Can_CheckWakeup)。

  • Can_CheckWakeup被调用后,确认唤醒源存在,则调用EcuM_SetWakeupEvent。

  • EcuM模块在Mainfunction开始Validation流程。首先调用EcuM_StartWakeupSource(由用户实现,调用CanSm_StartWakeupSource),用于开启必要的用于验证的资源(例如启动CAN总线以接收相关报文)。

  • EcuM模块在Mainfunction中调用EcuM_CheckValidation(由用户实现,其中调用CanIf_CheckValidation)。

  • CanIf_CheckValidation在调用后,检查是否之前收到了有效的Nm报文,若是则调用EcuM_ValidateWakeupEvent,否则无操作。

  • EcuM模块在Mainfunction在结束Validation流程(VALIDATED或EXPIRED)后,调用EcuM_StopWakeupSource(由用户实现,调用CanSm_StopWakeupSource),用于关闭必要的用于验证的资源(例如启动CAN总线以接收相关报文)。

  • 在第二段过程中,应当接收到CanNm报文。在CanIf_RxIndication中置位有效的Nm报文标志位(仅检查CanId)。报文传到CanNm模块后,进行检查后调用Nm_NetworkStartIndication,再调用了ComM_Nm_NetworkStartIndication,用于启动通信通道。

BswM模块相关的流程

  • BswM模块会在接收到其他模块的事件(Port)时,将与该事件(Port)关联的Rule进行规则的检查。由此,BswM进行检查的时间尤为重要。

    • 例如,当EcuM产生一个唤醒事件后,若BswM的mainfunction在EcuM的前面,若EcuM的Mainfunction执行“设置唤醒源状态为Validated”,则BswM模块不会及时处理该事件。调度周期结束后可能会由于Can模块的唤醒中断,进而“设置唤醒源状态为Pending”,下次调度周期来到时BswM的mainfunction检测到的唤醒源状态仍然为Pending而非Validated,导致BswM模块的SysState无法转换到工作状态。


Comment