AUTOSAR架构下的看门狗学习(2)-WdgM

本文详细解析了AUTOSAR架构中WdgM模块的工作原理,包括SE(受监测实体)和CP(检查点)的概念,以及Alive、Deadline和Logical三种监督方式。重点介绍了AliveSupervision的监测频率和状态机制,以及局部和全局状态的转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在AUTOSAR架构中,WdgM是看门狗最重要也是最复杂的模块。所以这里单开一篇来记录它。

1、SE与CP

        WdgM负责看门狗的逻辑控制。在WdgM中,受监测的程序被抽象成了两个概念:SE(Supervised Entities) and CP(Checkpoints)。SE简单理解就是一段被监测的程序,可以是一个SWC(software component),一个BSW Module(基础软件模块),一个OS调度的task。CP则可以理解为SE中的一个位置。

        WdgM定义了两个数据类型,WdgM_SupervisedEntityIdType和WdgM_CheckpointIdType
,用于给SE和CP赋予相应的ID号。

        如下图的API,WdgM_CheckpointReached(),调用该函数,用于表示程序运行到了相应SE中的CP。WdgM的监测逻辑都是基于该API完成的。

        这两个概念还是有点抽象,这里留个例子:

void core0_50ms_task(void)
{
    Std_ReturnType WdgM_CheckpointReached(3,1)
}

        这里有一个执行周期为50ms的task, WdgM_CheckpointReached(3,1)表示程序运行到了3号SE中的1号CP。监测task运行的方法:(SE需要使用配置工具指定,比如达芬奇下的ISOLAR,在配置工具中定义一个运行周期为50ms,ID为3的SE,且SE包含一个ID为1的CP。那么把WdgM_CheckpointReached(3,1)这个函数放在执行周期为50ms的函数才是正常的。如果放在周期为100ms的函数里,则SE的到达周期不对,会导致WdgM停止喂狗)

2、三种监测方式

        针对SE的监测方法有三种:

        (1)Alive Supervision

        (2)Deadline Supervision

        (3) Logical Supervision

        Alive Supervision用于监测SE中CP执行的频率。 Deadline Supervision用于监测两个CP之间的执行时间;logical supervision用于监测程序执行流(个人理解就是CP的到达顺序)。每个Supervision都只有两种结果:correct和incorrect。

        如下图所示,Deadline Supervision和Logical Supervision的结果在调用WdgM_CheckpointReached()函数时就会更新;而Alive Supervision是先通过WdgM_CheckpointReached()函数改变Alive Indication Counters(这个参数可以理解为一个计数器,每个CP都有一个,每当程序执行到CP,对应的计数器会加1),然后在WdgM_MainFunction()函数中,根据Alive Indication Counters,得到Alive Supervision的结果。

        WdgM定义了两种状态:Local Supervision Status和Global Supervision Status。Local Supervision Status即单个被监测SE的状态,而Global Supervision Status为全局状态,由所有SE的Local Supervision Status决定。

2.1、Alive Supervision

        由于本人目前只用过Alive Supervision,所以暂时只展开记录下Alive Supervision的使用经验,另外两种后续有机会再添加。

        前文说过 Alive Supervision用于监测SE中CP执行的频率。如下图解释:在一个周期(WdgMSupervisionReferenceCycle)内,到达CP的次数有一个期望值(WdgMExpectedAliveInidications)。

         但是肯定做不到绝对的准确,所以一个周期(WdgMSupervisionReferenceCycle)内到达CP的次数有一个可接受的范围(WdgMExpectedAliveInidications-WdgMMinMargin
到WdgMExpectedAliveInidications+WdgMMaxMargin)。如下图:

        前文提过 :Alive Supervision是先通过WdgM_CheckpointReached()函数改变Alive Indication Counters,然后在WdgM_MainFunction()函数中,根据Alive Indication Counters,得到Alive Supervision的结果。如下图提到了两个时间概念:WdgMSupervisionCycle和WdgMSupervisionReferenceCycle。WdgM_MainFunction()的执行周期为WdgMSupervisionCycle,每个WdgMSupervisionCycle,会更新局部和全局状态;对Alive Indication Counters(该参数会记录CP的到达次数)进行周期性检测,该周期为WdgMSupervisionReferenceCycle,每个WdgMSupervisionReferenceCycle,会更新Alive Supervision的结果。 WdgMSupervisionReferenceCycle是WdgMSupervisionCycle的倍数。

        总结就是一个WdgMSupervisionReferenceCycle得到一次Alive Supervision的结果(为correct或incorrect),根据这个结果,每个WdgMSupervisionCycle(即WdgM_MainFunction()每执行一次)更新全局和局部状态

3、局部状态机制和全局状态机制 

3.1、局部状态机制

        每个SE有4种局部状态;

1、WDGM_LOCAL_STATUS_DEACTIVATED

2、WDGM_LOCAL_STATUS_OK

3、WDGM_LOCAL_STATUS_FAILED

4、WDGM_LOCAL_STATUS_EXPIRED

        局部状态的主要转换规则如下:

        设备或WdgM模块未启用的话,局部状态为如果DEACTIVATED;设备启用并正常初始化,局部状态为OK;后续,根据3种Supervision的结果,局部状态会进行相应的转换。

        如下图:如果局部状态为OK,且至少有一个SE的Alive Supervision的结果为incorrect,且WdgMFailedAliveSupervisionRefCycleTol为0;同时,存在Deadline Supervision或Logical Supervision的结果为incorrect,则局部状态变为EXPIRED。

        这里提到了一个参数,WdgMFailedAliveSupervisionRefCycleTol。文档对这个参数的定义为:This parameter shall contain the acceptable amount of reference cycles with incorrect/failed alive supervisions for this Supervised Entity。即对一个SE来说,可以接受的,结果为incorrect的Alive Supervision的reference cycles(即WdgMSupervisionReferenceCycle)的数量。这个定义也有点jb抽象,这里举个例子:比如WdgMFailedAliveSupervisionRefCycleTol设置为20,当出现某个SE的Alive Supervision的结果为incorrect时(某个WdgMSupervisionReferenceCycle得到的结果),在WdgM_MainFunction()中,会更新该SE的局部状态为FAILED,这时,就认为有了一个failed supervision reference cycles。WdgM_MainFunction()的执行周期为WdgMSupervisionCycle,如果该SE的局部状态为一直为FAILED,每次执行WdgM_MainFunction(),failed supervision reference cycles就会加1,所以20个WdgMSupervisionCycle后(即WdgM_MainFunction()执行20次后),failed supervision reference cycles超过WdgMFailedAliveSupervisionRefCycleTol,局部状态由FAILED转变为EXPIRED。

       其余局部状态转换规则如下图,就不11翻译了:

3.2、全局状态机制

        全局状态机和局部状态机类似。

        主要有一个参数:WdgMExpiredSupervisionCycleTol。当某个SE的局部状态为FAILED的时候,全局状态转变为FAILED;当某个SE的局部状态为EXPIRED的时候,全局状态转变为EXPIRED;当全局状态为EXPIRED的时候,最多经过WdgMExpiredSupervisionCycleTol个WdgMSupervisionCycle(即WdgM_MainFunction()函数执行WdgMExpiredSupervisionCycleTol次),全局状态为STOPED。

4、主要API

4.1、用于初始化WdgM模块

 

4.2、用于配置WdgM模块模式 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值