AUTOSAR 看门狗 WdgM (全实操)

文摘   2025-01-03 07:27   上海  

一文了解AUTOSAR看门狗 建立了看门狗的基本认识之后,本文来了解更详细的AUTOSAR看门狗实操。



不要总说学 Autosar 软件好麻烦。这个 网页版 autosar, 注册即用,学习门槛降为零,手机都可注册使用,小编推荐 (因为是合肥巨佬做的),下图真实CAN配置截图


http://pzq.gkanghui.com:8083/login

目录


一、Watchdog协议栈介绍二、BSW配置1. WdgM模块配置2. Wdg模块配置3. WdgIf模块配置4. EcuM模块配置5. BswM模块配置三、RTE配置1. 新建Component以及Mapping2. 相关SWC模块更新(暂定)四、Wdg适配

Watchdog协议栈配置



Watchdog协议栈介绍

本文以AUTOSAR标准4.2.2为例,如下图1所示,整个Watchdog协议栈可以分为如下三个主要的模块:

图1 Watchdog协议栈总览



二、BSW配置


1. WdgM模块配置

首先基于Bsw Service模块创建一个全新的WdgM模块:

相关的重要配置参数如下表所示:

以下是本次示例工程的具体配置如下图所示:

在统一Container下面定义监控实体(Supervised Entities)(实测一个实体里面最多存在一个Alive CheckPoint)

如下几个参数设置需要注意:

WdgMEcucPartitionRef :EcuC Partition仅仅在partition在使用的过程中才需要用到,如果没有用到可以不用设置;

WdgMInternalCheckpointInitialRef :对于采用监控实体的初始节点;

WdgMInternalCheckpointFinalRef :对于监控实体的结束节点;

(1)新建监控实体

(2)新建Checkpoint

(3)将剩下的 Alive Supervision 添加进来,最终效果如下:

(4)添加程序流监控实体,并且设置监控实体的初始节点和监控实体的结束节点,由于AEB Logic Supervision CheckPoint 并没有终点,实测工具编译报错,所以针对这个情况做出以下修改:

新增一个checkpoint作为终点,调用的时候先调终点再调起点。

最终效果如下:


(5)添加 WdgMInternalTransitions(这个容器定义了这个监督实体内的内部转换Graph)

WdgMInternalCheckpointInitialRef :这是对这个被监督实体内部转换的目标检查点的引用;

WdgMInternalTransitionSourceRef :这是对这个被监督实体内部转换的源检查点的引用;

(6)根据程序流执行图依次添加WdgMInternalTransitions,最终效果如下

(7)对于 WdgMWatchdog 暂时不要设置任何Reference,后面会讲到:

(8)切换至WdgMConfigSet container,然后创建一个新的WdgMMode配置,并设置参数

WdgMexpiredSupervisionycleTol:该值固定了在GLOBAL supervision STATUS达到expired状态后,看门狗触发的阻塞延迟多长时间的过期监督周期的数量;

WdgMSupervisionCycle:WdgM_MainFunction的运行周期;

(9)双击 WdgMConfigSet_0 设置 WdgM初始化的模式


(10)创建一个新的 WdgMAliveSupervision ,并设置相关的参数

WdgmExpectedAliveIndications :Alive检查点执行的预期数

WdgMMaxMargin:最大容差

WdgMMinMargin :最小容差

WdgMSupervisionReferenceCycle:用于监控的时间区段。

由于Wdg_Mainfunction周期为10ms,因此 WdgMSupervisionReferenceCycle 设置成20,即表示监控时段为100ms。

(11)以上述同样的方式来完成剩余的,完成效果如下:

(12)创建 WdgMLocalStatusParamss 设置WdgMMode 索引监控实体

WdgMlocalStatusSupervisedEntityRef:索引的监控实体;

WdgMfailedAliveSupervisionRefCycleTol:设置失败的Alive Supervision次数决定该监控实体什么时候可以进入到 Expired状态;

(13)最终效果如下所示:

(14)最后在 WdgMMode 内部创建一个新的 WdgTrigger ,该container用于设置每次调用SetTriggerCondition函数进行喂狗的时间间隔,通过设置参数 WdgMTriggerConditionValue 来决定,单位为ms,然后选择 WdgMWatchDogMode 来设定喂狗的模式,该模式在正常状态下一般设置成 FAST 模式,然后设置参数 WdgMWatchdog 来索引在 WdgMGeneral 创建的Watchdog。


2. Wdg模块配置

接下来我们来创建Wdg模块,首先跟之前创建WdgM模块类似的方式创建Wdg模块,如下图所示

这个模块属于MCAL中的一部分,因此需要作为索引来实现整个在ETAS工程中的配置, 同时需确保相关的配置参数与MCAL实际配置的保持一致;



3. WdgIf模块配置

接下来我们来配置WdgIf模块,该模块的创建于Wdg模块类似,如下图所示:

首先配置 WdgIfGeneral 模块:

然后配置 WdgIfDevices ,在当前case中仅存在一个Watchdog,因此仅需reference之前的一个Wdg即可,当然如果存在多个Watchdog,那么需要多创建一个Watchdog Driver模块,以便在WdgIfDevice中可以进行添加。

现在 WdgIfDevice 已经被创建,因此回到之前的WdgM模块,在 WatchdogDeviceRef 中设置对应的索引,如下图:


4. EcuM模块配置

由于WdgM,Wdg,MCU模块需要在ECU启动的过程中进行初始化,因此针对Watchdog协议栈的初始化设定如下:


5. BswM模块配置

对于 WdgM Deinitialization 需要在BswM模块中创建一个WdgDeInit 的Action:

然后将该 Action添加至BswM Action List :”BswM_AL_Shutdown“ :

添加 WdgM.h 头文件

至此,你便可以通过添加新增模块WdgM与WdgIf模块,便可以完成BSW的生成:


最后一件需要做的事情就是需要修改Watchdog的集成代码,特别需要关注 WdgM_Bsw_User.c 以及 WdgM_Bsw_User.c 这两个文件,我们可以不走RTE接口来实现监控。

三、RTE配置


1. 新建Component以及Mapping

(1)新建 Component Prototype

(2)勾选 CPT_WdgM 模块

(3)Component Prototype Systerm Mapping

(4)设置 WdgM 所在分区(本工程要求 WdgM 在 Core3)

完成效果如下(这一步骤开启了 BSW 标志编译会导致存在两个 BSW 标志,会报错,解决方法在(6)):

(5)RTE Mapping

完成效果如下:

(6)修改 EcucPartitionBSWModuleExecution(BSW 标志)(实测这里设置 True 编译报错,存在多个 BSW)


2. 相关SWC模块更新(暂定)

添加下面三类Port口:

为Alive Supervision添加可以设置checkpoint的RPort接口,该Port Interface类型为 WdgM_LocalSupervision ;

添加一个RPort用于读取监控实体的Local Status,使用的Port Interface是 WdgM_LocalMode ;

添加一个RPort用于读取监控实体的Global Status,使用的Port Interface是 WdgM_GlobalMode ;

然后


,设置相关的 Service Call Point ,该Service Call Port必须进行创建:

最后添加该SWC对应的mapping Type Maps用于wdg协议栈的新模式:

###以下是监控走RTE的方式###

四、Wdg适配

以上 RTE 编译完成之后生成代码,使用 BeyondCompare 对比代码并合入到主代码中,在BSW配置中我们将wdg模块名字配置为Wdg,因此它生成的依赖都是以Wdg为开头的。

(xxx.h 、xxx_Init 、xxx_SetMode 、xxx_SetTriggerCondition)

以上三个接口需要和 Wdg Mcal 驱动做对接,这里我先留空



谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章