本文自来作者:汽车电子嵌入式软件分享,欢迎关注原作者。
1.1 引言
1.2 Local Status & Global Status
1.2.1 Local Status
1.2.2 Global Status
1.3 监控原理
1.3.1 Alive监控
1.3.2 Deadline监控
1.3.3 Logical监控
2.1 内部看门狗
2.1.1独立看门狗
2.1.2 窗口看门狗
2.2 外部看门狗
2. 不同类型看门狗的使用场景
2.3.1 独立狗VS窗口狗
2.3.2 内狗VS外狗
WdgM是标准的Autosar架构中的服务层,主要负责监控程序的执行,其监控的单元称为独立实体(Entity)。WdgM提供了三种监控机制:
1 针对周期运行软件的的Alive监控;
2 针对非周期运行软件的DeadLine监控;
3 针对执行顺序的逻辑(Logical)监控。
Alive监控通过配置一段时间内的软件期望执行次数来监测Entity是否执行的过快或者过慢。DeadLine监控通过设置两个监控点(Checkpoint)间允许运行的时间来监测Entity的执行时间是否符合要求。Logical监测聚焦于流程的运行,主要用来监测Entity是否按照给定的流程运行。
当发生看门狗错误时,一般有4种处理方式供用户选择:
1 通过RTE通知SWC或者CDD;
2 当监测到non-trusted发生错误时,可以通过BswM模块停止这个partion;
3 重新初始化硬件和软件(先deinit再init);
4 复位MCU。
1.2 Local Status & Global Status
当调用WdgM_Init初始化后,各个Entity的local状态为WDGM_LOCAL_STATUS_OK。
1)当出现喂狗错误(Alive监控的错误次数大于配置的WdgMFailedAliveSupervisionRefCycleTol或者出现DeaDline监控错误)时,Local状态将在WdgM_MainFunction中切换为WDGM_LOCAL_STATUS_EXPIRED; 2)当Alive监控出现错误且错误次数不大于配置的WdgMFailedAliveSupervisionRefCycleTol时,Local状态将在WdgM_MainFunction中切换为WDGM_LOCAL_STATUS_FAILED; 3)用户可以通过WdgM_SetMode函数将Local状态设置为WDGM_LOCAL_STATUS_DEACTIVATED,当在DEACTIVATED设置为ACTIVE时,将返回到WDGM_LOCAL_STATUS_OK状态; 4)处于WDGM_LOCAL_STATUS_EXPIRED时,WdgM_MainFunction会一直监测到Alive监控的正确性,正确时会减小错误的counter计数,不正确时会增加错误counter计数,从而决定是跳到OK还是EXPIRED状态(当然Deadline错误会直接跳转到EXPIRED)。
1.2.2 Global Status
当调用WdgM_Init初始化后,Global状态为WDGM_GLOBAL_STATUS_OK。
1) 当至少一个Entity的Local状态为Failed且没有一个Entity的状态为EXPIRED时,Global状态在WdgM_MainFunction中切换为WDGM_GLOBAL_STATUS_FAILED; 2)当至少一个Entity的Local状态为EXPIRED且次数小于配置的WdgMFailedAliveSupervisionRefCycleTol时,Global状态切换为WDGM_GLOBAL_STATUS_EXPIRED(如果WdgMFailedAliveSupervisionRefCycleTol为0,则直接进入WDGM_GLOBAL_STATUS_STOPPED); 3) 当Global状态处于WDGM_GLOBAL_STATUS_EXPIRED时,会对EXPIRED的错误次数进行监测,当错误次数大于配置的WdgMFailedAliveSupervisionRefCycleTol时,切换到WDGM_GLOBAL_STATUS_STOPPED状态; 4) 处于WDGM_GLOBAL_STATUS_STOPPED时,可以通过WdgM_DeInit函数进入WDGM_GLOBAL_STATUS_DEACTIVATED状态。
1.3 监控原理
1)是Initial Checkpoint(通过WdgMInternalCheckpointInitialRef配置的checkpoint),那么就会将Active标志置为True,表示后续将会对SE进行逻辑判断; 2) 不是Initial Checkpoint触发(其他的checkpoint到达了),那么本次Logical监控的SE的运行结果就是错误的(Local状态变为FAILED或者EXPIRED(如上描述,根据配置决定))。
Autosar中WdgM负责提供用户设置的监控点,WdgIf负责对看门狗进行抽象,向WdgM提供统一的接口,Wdg可以是内狗也可以是外狗。
看门狗按位置可以分为内狗与外狗。顾名思义,内狗就是单片机内部的看门狗,外狗就是挂在单片机外部的看门狗。内狗一般通过操作寄存器来喂狗,而外狗可以通过硬件(如SPI/I2C/IO)来喂狗。
看门狗的喂狗一般是任务中喂狗而不是定时器中断喂狗,因为如果出现了任务跑飞或者陷入某个死循环,定时器中断可能还在正常运行并正常喂狗,那么看门狗就会失去作用。但是,对于使用窗口狗来说,可以结合定时器中断来进行喂狗,下边我们将详细叙述这两种模式。
1) 当Global状态为STOPPED时,此时不再喂狗(将TimeOutValue设置为0); 2) 当Global状态为其他状态时,将TimeOutValue设置为用户通过Autosar工具配置的值(WdgMTriggerConditionValue配置的值)
1) 如果ElapsedTime大于看门狗超时时间那么就不需要再在中断中喂狗,此时只需要停止定时器中断即可(调用Gpt_StopTimer); 2) 如果ElapsedTime小于看门狗超时时间,那么只需要设置新的超时时间并等待定时器中断到达后,在中断服务函数中进行喂狗即可。
创作不易,欢迎关注点赞再看收藏!
汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。