目录
往期推荐
- ETAS工具链自动化实战指南<一>
- ETAS工具链自动化实战指南<二>
- ETAS工具链自动化实战指南<三>
- AUTOSAR工程师必读:Artop的核心功能
- Vector工具链自动化实战指南<一>
- isolar高手秘籍| ECU Configuration三分钟速成!
- 掌握核心步骤:RTA-BSW以太网配置全解析
- 一文详解TC399 CAN MCAL 配置
- LSL常见应用场景及示例<一>
- LSL常见应用场景及示例<二>
- LSL常见应用场景及示例<三>
- 为什么Autosar钟情arxml而非json?大揭秘!
在autosar项目中配置WatchDog(看门狗)Stack是确保系统稳定性和可靠性的关键步骤。以下为大家总结基于ISOLAR-AB工具的相关详细的核心配置流程。
目标
掌握如何在一个autosar项目中配置WatchDog Stack。
前提条件
-
熟悉如何使用 ISOLAR-AB 创建和配置 AUTOSAR 项目,可参考之前的isolar基本配置流程(01,02,03)文章,以更好地理解 ISOLAR-AB 以及用于创建和配置 AUTOSAR 项目的工具。
-
安装 RTA-CAR 工具链
WatchDog Stack概述
在AUTOSAR 4.2.2中,WatchDog Stack由3个模块组成:
-
WdgM: WatchDog Manager - 它是BSW的一个服务,能够监督程序执行,抽象出硬件看门狗实体的触发。
-
WdgIf: WatchDog Interface - 它是车载设备抽象层的一部分,允许WdgM处理多个看门狗设备。
-
Wdg: WatchDog Driver - 它是MCAL的一部分,允许设备的初始化、模式设置和触发条件设置。
首先我们重点介绍下WatchDog Stac堆栈中最复杂的模块WdgM的最重要功能。Watchdog Manager 负责监督可配置数量的“Supervised Entities”的执行。当它检测到程序执行中违反了配置的时间或逻辑约束时,会采取一系列可配置的动作来恢复故障。Watchdog Manager 提供了三种机制:
-
Alive supervision - 用于周期性软件的定时监督。
-
Deadline Supervision - 用于非定期软件。
-
Logical Supervision- 用于监督执行顺序的正确性。
典型的Supervised Entity是一个SWC或一个runnable ,每个都有一个或多个CheckPoints ,最终通过Transitions 连接在一起,形成一个Graph。以下是关于监督机制的详细介绍:
-
Alive supervision :检查受监督实体是否运行得太频繁或太稀少,设置一些参数作为参考周期,这是一个时间间隔,在该时间间隔内检查实体,检查点在参考周期内的预期出现次数,上限和下限容差。
-
Deadline Supervision :检查两个定义的检查点之间的时间,这里的主要参数是:最小时间和最大时间。
-
Logical Supervision:检查程序的执行流程是否有效,定义一些检查点和它们之间的允许转换。
WdgM可以处理多个 Supervised Entities和多个Wdg设备;因此,为每个 Supervised Entities定义一个本地状态,表示 Entities的状态为:监督正常、监督失败或监督过期。下图描述了本地状态的状态机:
所有配置的Supervised Entities的组合,形成一个全局状态,其状态机类似于前面的状态机:
这些状态的计算在 WdgM_MainFunction 的上下文中定期进行;为了设置本地状态值,WdgM 会参考每个Supervised Entities的三种监督结果。如下图:
在配置了 Alive Supervision 的特定情况下,查看下图可能会帮助大家更好地理解算法是如何计算状态的:
示例项目概述
示例项目将实现一个具有三个checkpoints的 Supervised Entity :
-
一个用于Alive supervision
对于alive supervision,将创建一个以 10 ms周期运行的runnable ,并设置checkpoint ;WdgM 将检查在 1 s的时间间隔内检查否达到了100次checkpoint ,并允许上下浮动5次的容差。
-
两个用于deadline supervision
对于deadline supervision,将使用相同的runnable 元,并在特定情况下(接收到定义的 CAN 信号)触发deadline supervision。
配置工作流程概述
Step1. WdgM模块配置
Step2. Wdg模块配置
Step3. WdgIf模块配置
Step4. OS配置
Step5. EcuM更新
Step6. BswM更新
Step7. SWC更新
Step8. 系统更新
isolar工具主要配置步骤
Step1. WdgM模块配置
首先,从BSW服务中创建一个新的WdgM模块:
配置WdgMGeneral容器设置:
-
WdgMDefensiveBehaviour: 如果使用DET且配置了多个调用者标识符以检查其有效性,则将此项设置为
true
。 -
WdgMDemStoppedSupervisionReport: 设置为
true
,以在全局状态为STOPPED时向DEM启用通知。 -
WdgMImmediateReset: 如果 alive supervision失败,(全局状态为STOPPED)应立即重置ECU,则将此项设置为
true
。 -
WdgMOffModeEnabled: 设置为
true
,以能够关闭看门狗。
还有一些特定于工具链的参数需要设置,最重要的有:
-
WdgMRbDeadlineTimeoutDetect: 设置为
true
时,它允许 WdgM_MainFunction 在deadline supervision 中检测超时,即使结束checkpoint从未达到。。 -
WdgMRbInterruptLockDisable: 在WdgM_MainFunction中生成中断锁。
-
WdgMRbRTEDisabled: 用于控制 Watchdog Manager (WdgM) 是否生成模式切换指示到 RTE(运行时环境)。如果将其设置为
true
,则 WdgM 将不会向 RTE 发送模式切换指示。
以下是此项目中使用的配置:
在同一容器中,定义受监督实体(Supervised Entities):
在此示例中,仅定义一个 WdgMSupervisedEntity
,并在其中定义三个新的检查点(Checkpoints)。
并设置以下引用:
-
EcuC partition,仅在使用了partition的情况下(
WdgMEcucPartitionRef
) -
counte的起始checkpoint(
WdgMInternalCheckpointInitialRef
) -
OS counter
-
counte的结束checkpoint(
WdgMInternalCheckpointFinalRef
)
最后创建一个 WdgMWatchDog
,但目前先不设置任何引用(后面的步骤进行)。
现在切换到 WdgMConfigSet
容器,创建一个新的 WdgMMode
,并设置 WdgMExpiredSupervisionCycleTol
和 WdgMSupervisionCycle
,其中 WdgMSupervisionCycle
是 WdgM_MainFunction
执行的周期。
然后创建一个新的 WdgMAliveSupervision
;设置需要检查的 Checkpoint 的引用以及 Checkpoint 的预期出现次数值(WdgMExpectedAliveIndications
)、对此值的容差(WdgMMaxMargin
和 WdgMMinMargin
),以及作为检查时间间隔的监督周期数(WdgMSupervisionReferenceCycle
)。
以类似的方式创建一个 WdgMDeadlineSupervision
,设置最小和最大时间值(WdgMDeadlineMax
和 WdgMDeadlineMin
),以及对起始和结束 Checkpoints 的引用。
每个 WdgMMode
需要至少引用一个 Supervised Entity;这个引用是 WdgMLocalStatusParams
的一个子容器的一部分;每个受监视实体都必须有一个子容器,除了对 Supervised Entity的引用(WdgMlocalStatusSupervisedEntityRef
)之外还需要设置在局部状态变为 EXPIRED 之前的失败活跃监督周期数(WdgMfailedAliveSupervisionRefCycleTol
)。
最后,在 WdgMMode
内创建一个新的 WdgMTrigger
;这个容器用于设置调用 SetTriggerCondition
函数以喂给硬件看门狗设备的时间间隔。设置 WdgMTriggerConditionValue
(以ms为单位),将 WdgMWatchDogMode
设置为所需的值(在这种情况下,由于将使用虚拟目标,选择 SLOW MODE
或 FAST MODE
并不会有任何区别);并设置对 WdgMWatchdog
(在 WdgMGeneral
中创建的) 的引用。
Step 2. Wdg 模块配置
创建驱动程序 Wdg;与 WdgM 的创建方法相同。
此模块是 MCAL 的一部分,以下示例项目中的设置仅适用于虚拟 target。
Step 3 :WdgIf 模块配置
最后,创建设备抽象层模块:WdgIf。按照之前为 WdgM 的方式创建此模块。
配置WdgIfGeneral
然后创建 WdgIfDevices;创建一个 WdgIfDevice;设置对之前模块中创建的设备(Wdg)的引用。
注意:现在 WdgIfDevice 已经创建完成,返回到 WdgM 并在 WdgMGeneral//WdgMWatchDog 中设置对该设备的引用。
Step4:OS 配置
由于deadline supervision需要一个 OS 计数器引用,因此,打开 OS 模块并创建一个新的计数器:
然后返回到 WdgMSupervisedEntity 并配置对OS 计数器的引用。
Step5:EcuM 配置
WdgM、Wdg 和 Mcu 模块需要在 ECU 启动阶段初始化,因此在 EcuMDriverInitListOne 中配置两个新项,如下所示:
Step6:BswM 配置
为了进行 WdgM 的deinitialization,创建一个新的action:
将此action添加到 BswM action List “BswM_AL_Shutdown”中。
现在就可以生成 RTA-BSW啦!记得勾选添加新的模块 WdgM 和 WdgIf。
在系统配置之前,最后还需要一步-------就是编辑集成代码;
特别是查看 WdgM_Bsw_User.c
和 WdgM_Bsw_User.h
文件;
需要编辑这些文件,使用生成的模板为每个checkpoint 创建函数;在示例中,只创建了用于deadline supervision的checkpoint 的函数,而alive supervision将使用 RTE:
-
WdgM_Bsw_User.c
:
-
WdgM_Bsw_User.h
:
Step7. 系统配置 SWC 更新
BSW 源代码的生成中还创建了 WdgM service component 的描述文件,该文件提供了一些 port interface ,下面将在我示例中的 SWC 中使用这些接口。
首先,可以编辑现有的 SWC,也可以创建一个新的 SWC,并为其创建一个由iming event触发的新 runnable:
现在添加以下端口:
-
一个用于设置达到的 checkpoint 以进行 alive supervision;WdgM 的 swmd 文件提供了 Client Server port Interface:WdgM_LocalSupervision。
-
添加一个 RPort,使用Mode switch port interface
WdgM_LocalMode
读取 Supervised Entity 的本地状态。 -
添加一个 RPort,使用Mode switch port interface
WdgM_GlobalMode
读取全局状态。
然后,必须创建相关的 Server Call Point:
最后,将类型映射(Type Maps)添加到 SWC 的【Main】配置中,引用 Wdg 堆栈所使用的新模式:
第 8 步. 系统更新
新组件已添加到系统中,这些组件必须添加到系统的composition中,并映射到适当的 ECU。
映射完成后,打开系统并使用 RTE 编辑器,将新的runnable映射到 OS Task中:
现在创建 WdgM 端口与 SWC 中添加的端口之间的连接:
最后,更新 ECU extract 文件并生成 RTE 和OS即可。