事件Debounce策略概述
Dem模块提供了几个优化信号质量的Debounce策略,包括基于计数的Debounce算法、基于时间的Debounce算法以及特定的Debounce算法。Dem模块可以通过配置事件的DemDebounceAlgorithmClass容器来选择相应的Debounce算法。
基于计数的Debounce算法
Dem模块根据上报检查结果(Passed/Failed),内部Debounce计数增加/减少N(步长)。当内部Debounce计数达到失败阈值时,monitor会上报DEM_EVENT_STATUS_FAILED状态;当内部Debounce计数达到成功阈值时,monitor会上报DEM_EVENT_STATUS_PASSED状态。
若开启jump-down功能,当内部Debounce计数达到失败阈值后,内部Debounce计数设置为jump-down初始值。若开启jump-up功能,当内部Debounce计数达到成功阈值后,内部Debounce计数设置为jump-up初始值。下图为计数Debounce的示例:
Dem模块提供了DemDebounceBehavior参数,定义在Enable condition和ControlDTCSetting过程中上报的处理方案,具体配置和处理流程如下图所示:
DEM_DEBOUNCE_STATUS_FREEZE:在Enable condition和ControlDTCSetting过程中上报,内部Debounce计数保持不变;
DEM_DEBOUNCE_STATUS_RESET:在Enable condition和ControlDTCSetting过程中上报,内部Debounce计数清零。
Dem模块提供了DemDebounceCounterStorage参数,定义内部Debounce计数是否需要存储。若开启,Dem模块会在Dem初始化(Dem_Init)的时候重载之前存储的内部Debounce计数。
其中Autosar 配置如下:
- 开启基于计数的Debounce算法(DemDebounceCounterBasedSupport = true)
- 设置event的Debounce算法(DemDebounceAlgorithmClass = DemDebounceCounterBased)
- 设置Failed阈值(DemDebounceCounterFailedThreshold)
- 设置passed阈值(DemDebounceCounterPassedThreshold)
- 设置内部Debounce计数步长(DemDebounceCounterIncrementStepSize)
- 开启Jump down功能(DemDebounceCounterJumpDown = true)
- 设置Jump down初始值(DemDebounceCounterJumpDownValue)
- 开启Jump up功能(DemDebounceCounterJumpUp = true)
- 设置Jump up初始值(DemDebounceCounterJumpUpValue)
- 设置Debounce行为(DemDebounceBehavior)
- 设置内部计数存储功能(DemDebounceCounterStorage)
基于时间的Debounce算法
Dem模块根据上报检查结果(Passed/Failed),开启Failed/Passed内部Debounce定时器。当内部Debounce定时器达到失败阈值时,monitor会上报DEM_EVENT_STATUS_FAILED状态;当内部Debounce定时器达到成功阈值时,monitor会上报DEM_EVENT_STATUS_PASSED状态。
具体Debounce流程如下图所示:
Dem模块提供了DemDebounceBehavior参数(同计数Debounce功能相同),定义在Enable condition和ControlDTCSetting过程中上报的处理方案,具体配置和处理流程如下图所示:
DEM_DEBOUNCE_STATUS_FREEZE:在Enable condition和ControlDTCSetting过程中上报,内部Debounce定时器保持不变;
DEM_DEBOUNCE_STATUS_RESET:在Enable condition和ControlDTCSetting过程中上报,内部Debounce定时器清零。
具体Debounce Reset流程如下图所示:
其中Autosar 配置如下:
- 开启基于计数的Debounce算法(DemDebounceTimeBasedSupport= true)
- 设置event的Debounce算法(DemDebounceAlgorithmClass = DemDebounceTimeBase)
- 设置Failed阈值(/DemDebounceTimeFailedThreshold)
- 设置passed阈值(DemDebounceTimePassedThreshold)
特定的Debounce算法
针对一些有特殊需求的应用程序,Dem模块还扩展了其他的特殊Debounce算法。
Monitor Debounce 算法
Dem模块提供了一个monitor debounce算法,若配置成DemDebounceMonitorInternal,Dem模块不能为每个event使用内部debounce机制,其中monitor就不可以上报DEM_EVENT_STATUS_PREFAILED和DEM_EVENT_STATUS_PREPASSED状态。
当调用Dem_PreInit函数和清除DTC(14服务)时,Dem模块会复位内部debounce算法及相关参数。
总结
本章节主要描述了Dem模块Debounce策略和常用的几种Debounce算法的使用方法和Autosar配置。这些功能仅仅是Dem模块的一小部分,同时我们还需要了解Dem模块其他功能和Autosar工具的配置选项,这样才能灵活使用Autosar工具配置和调试相关的BUG。
本章节主要参考Autosar标准的Dem模块相关文档和ISO14229标准等。