AUTOSAR - BSWM - 学习三 (模式控制)

1、简介

        BswM的模式控制部分根据模式仲裁的结果执行所有必需的操作。这是通过Action List
(操作列表)完成的。操作列表是由模式仲裁触发时BswM执行的操作的有序列表。

        操作列表中的操作可以有三种类型

        1)、调用其他BSW模块或RTE。一组预定义的操作

        2)、指向要包含在执行中的其他操作列表的链接

        3)、仲裁规则模式。当执行相应的操作列表时,将对这些规则进行计算。这样,就得到了规则的层次结构。

        BswM不需要在其执行的操作上存储或响应任何BSW模块特定的返回值。因此,BSW中的不同状态管理器将它们的当前状态指示给BswM,以便用作模式仲裁的输入。但是,如果返回一个错误(E_NOT_OK), BswM可以发出一个DEM事件和/或取消当前正在执行的操作列表。

AUTOSAR - BSWM - 学习三 (模式控制)_第1张图片

        如上图所示, BswM可能包含多个动作列表,一个动作列表可以包含多个动作。为了减少行动清单的总数,应能够将它们按级排列。操作列表的元素既可以是具体操作,也可以是对另一个操作列表的引用,或者如上所述,是由模式仲裁执行的规则。每个动作列表条目(动作/引用/规则)都应该有一个标志。有具体动作的列表与有引用的列表甚至混合列表的激活方式应该没有区别。

2、 模式处理周期

        下图显示了模式请求的最小处理周期:

        1)、模式请求器SW-C通过其发送端端口请求模式A。RTE分发请求,BswM通过其接收端口接收请求。

        2)、BswM根据收到的模式仲裁请求的结果,或者在BswM主函数的执行过程中周期性地评估其规则。

        3)、根据选定的执行方法执行相应的操作列表。

        4)、在执行动作列表时,BswM可能会向RTE Switch API发出一个或多个调用,作为动作,将仲裁结果通知受影响的SWC。任何SW-C,特别是模式请求者都可以注册以接收模式切换指示。

        注意,模式请求者只能从本地BswM接收模式切换指示;对于由本地代理SW-C发出的来自不同ECU的请求也是如此。

        AUTOSAR - BSWM - 学习三 (模式控制)_第2张图片

 3、模式控制要求

        对于模式仲裁的每个规则,BswM应该能够根据规则的评估结果是True还是False执行不同的操作列表。

        行动清单由BswM应按顺序执行的一组行动组成。行动清单可以包含BswM应在执行中包含的其他行动清单的链接。

        行为列表还可以包括模式仲裁规则的链接,BswM应在当前行为列表的执行范围内评估这些规则。

         如果一条规则包含在上一句话中指定的操作列表中,由该评估产生的任何操作列表执行都应由BswM执行,然后再继续执行原始的操作列表。

      如果使用级联操作列表(即使用对其他规则或操作列表的引用),则操作列表结构可能包含多达七(7)个层次结构。注意:此限制的目的是使测试BswM实现和生成器工具成为可能。必须用生成器工具检查极限。

        与在模式仲裁请求上下文中评估的规则相关联的操作列表应在模式仲裁触发时立即由BswM执行,而不是延迟到主函数执行。原理:这允许在必要时对模式请求有非常短的延迟。

        如果模式仲裁过程中多个规则触发了一个动作列表,则该动作列表只执行一次。

4、触发和条件操作列表

            有两种方法可以基于规则的求值来执行操作列表。或者在每次用相应的结果计算规则时执行,或者仅在计算结果与以前的计算结果不同时才执行。操作列表的执行方法使用BswMActionListExecution参数配置。

        如果为触发执行配置了True动作列表,BswM将只在相应规则的评估从False变为True时执行它。

        如果为触发执行配置了False动作列表,那么BswM将只在相应规则的评估从True变为False时执行它。

      如果动作返回E_NOT_OK,并且相应的BswMAbortOnFail配置参数设置为“true”,BswM将中止动作列表的执行。

        如果动作返回E_NOT_OK并且设置了相应的BswMReportFailToDemRef配置参数,BswM将报告DEM事件。

5、可用的行动

        BswM应该能够调用AUTOSAR BSW中的任何函数,即使它不在BswMAvailableActions中定义的标准化操作中。

        BswM应该能够调用用户定义的函数。

        用户定义函数的参数及其值应在ECU配置时定义。

注意:BswM只能执行在它自己的分区上可用的操作。

6、初始化后的模式控制行为

        初始化BswM后的模式控件的行为由BswMRuleInitState参数配置(在BswMRule容器中)。它定义了在初始化后对规则进行第一次评估后决定执行什么操作列表时使用的前一次评估结果。配置参数BswMActionListExecution(在BswMActionList容器中)也会影响初始化后的动作列表执行。

        当规则初始化后第一次评估时,BswM应根据下所述的操作。

AUTOSAR - BSWM - 学习三 (模式控制)_第3张图片

7、I-PDU组动作的处理

        BswM是唯一控制I-PDU组的启动和停止,以及I-PDU截止日期监视的启用/禁用的模块。因此,Com不提供I-PDU组状态的访问器函数。所以BswM必须维护几个com_ipdugroupvector来实现Com_IpduGroupControl和com_receitiondmcontrol动作。此外,为了以高效和一致的方式执行I-PDU组开关(启用/禁用),BswM应在处理主函数或立即处理请求结束时执行实际的I-PDU组控制函数调用。本质上,这意味着BswMPduGroupSwitch操作操作两个位于BswM内部的I-PDU组向量,这些内部向量作为参数传递给 Com_IpduGroupControl。同样地,BswMDeadlineMonitoringControl操作BswM内部的I-PDU组向量,它被传递给com_receitiondmcontrol。

        BswM应该保留内部变量作为BswMPduGroupSwitch动作结果的累计存储。在BswM初始化时,这些内部变量应初始化为0。当调用Com_IpduGroupControl()函数时,这些内部变量应使用作为参数。

        Com_IpduGroupControl API提供了一个初始化标志,用于请求初始化新启动的i - pdu。初始化标志不提供启动多个i - pdu的方法(在对Com_IpduGroupControl的单个调用中),其中一些i - pdu需要初始化,而另一些不需要初始化。为了使BswM正确地支持在单个处理周期中执行多个BswMPduGroupSwitch操作(BswMPduGroupSwitchReinit值不同)的配置,需要多次调用Com_IpduGroupControl。

        如果BswM执行了任何BswMPduGroupSwitch操作,则BswM将在处理BswM主函数或立即处理请求结束时执行Com_IpduGroupControl命令。

如果BswM执行了任何BswM deadlinemonitoringcontrol操作(疑问:这点是不是和WDGM关联了?),BswM将在其处理BswM主函数或立即请求处理结束时执行com_receitiondmcontrol命令。

        

 

        

        

          

        

        

你可能感兴趣的:(AUTOSAR,BSWM,汽车电子,c语言,单片机,mcu)