背景
之前简单介绍了Autosar Dem模块,接下来我们直接切入主题,如何通过VectorConfigurator Pro工具配置Dem模块的通用设置,并实现客户的需求。
Dem通用配置
DemAgingAfterHealing:修复后老化设置
-
DEM_AGING_WHILE_HEALING:允许事件只要满足老化条件就可以开始老化。这意味着在事件请求一个指示的时候也可以老化。老化运行周期要慢于运行周期。
-
DEM_AGING_AFTER_HEALING:允许事件只有在完成修复之后才可以老化(warningIndicatorRequested状态标志位拉低)。这个设置只会影响带有指示的事件。这种操作时满足AUTOSAR标准的
-
DEM_AGING_AFTER_HEALING_ALL_DTC:与DEM_AGING_AFTER_HEALING设置相似,但是也影响到没有指示的事件(即没有设置WIR位),事件只能在重启之后开始老化。这样的话不管是有指示还是没有指示的事件都会在相同的周期中老化。
DemAgingBehavior:老化算法设置
-
AGING_TYPE_1:开始老化的初始触发器是测试结果PASSED。老化计数器在老化周期结束时递增。带有DemAgingCycleCounterThreshold == 0的事件将随着PASSED测试结果而老化。
-
AGING_TYPE_2:如果在此周期中测试事件为PASSED而从未测试事件为FAILED,则启动老化的初始触发器是操作周期的结束。老化计数器在老化周期结束时递增。如果事件在此周期中测试为PASSED,而没有测试为FAILED,则DemAgingCycleCounterThreshold == 0的事件将在操作周期结束时老化。
-
AGING_TYPE_3:如果在此周期中测试事件为PASSED而从未测试事件为FAILED,则启动老化的初始触发器是操作周期的结束。如果事件在这个周期中被测试为PASSED而从未被测试为FAILED,则在老化周期结束时增加老化计数器。如果事件在此周期中测试为PASSED,而没有测试为FAILED,则DemAgingCycleCounterThreshold == 0的事件将在操作周期结束时老化。
-
AGING_TYPE_4:开始老化的初始触发器是测试结果PASSED。如果测试事件通过,则在老化周期结束时增加老化计数器。带有DemAgingCycleCounterThreshold == 0的事件将随着PASSED测试结果而老化。
-
AGING_TYPE_5:如果在此周期中测试事件为PASSED而从未测试事件为FAILED,则启动老化的初始触发器是操作周期的结束。如果事件在这个周期中被测试为PASSED而从未被测试为FAILED,则在老化周期结束时增加老化计数器。如果事件在这个周期中没有被测试为FAILED,那么带有DemAgingCycleCounterThreshold ==0的事件将随着PASSED测试结果老化。
-
AGING_TYPE_6:启动老化的初始触发器是测试结果PASSED,如果事件在此周期中从未测试过FAILED。如果事件在这个周期中被测试为PASSED而从未被测试为FAILED,则在老化周期结束时增加老化计数器。带有DemAgingCycleCounterThreshold== 0的事件将随着PASSED测试结果而老化。
DemAgingCounterBehavior:老化计数设置
-
DEM_AGING_COUNT_ALWAYS:对每个事件递增/递减老化计数器。如果事件不支持老化,则递增老化计数器锁存于255,递减老化计数器停止于0。
-
DEM_AGING_COUNT_ONLY_AGEABLE:只对支持老化的事件递增/递减老化计数器。如果事件不支持老化,则递增计数保持在0,递减计数保持在配置的阈值。
DemAgingCounterReporting:老化计数在扩展记录中的数据
-
AGING_NORMAL_REPORTING:根据内部数据元素(UPCOUNT/DOWNCOUNT)的定义报告计数器
-
AGING_ZERO_AS_ONE_REPORTING:对于向上计数,在开始老化的周期中,计数器值0x00被报告为值0x01。这对向下计数和老化周期计数器阈值为0的事件没有影响。
DemAgingRequieresTestedCycle: 未支持
DemAgingRetainEnvironmentalData:若设置disable,所有存储数据(快照和扩展数据)会在老化时清除,符合AOTUSAR标准;若设置为enable,所有存储数据(快照和扩展数据)会在老化时不清除, 即使Bit3状态位为0,但还是可以通过UDS指令读取到相关数据。
DemAgingCycleCounterProcessing:参数被操作周期替代。
DemAvailabilityStorage:定义事件的运行时间变化是否存在NVM中。若禁用,不存储事件的运行时间变化,APIDem_SetEventAvailable()会按照Autosar SWS规定设置。若启用,存储事件的运行时间变化,需要设置以下设置。
-
新增一个DemNvRamBlockIdType配置为DEM_NVBLOCK_AVAILABILITY的NVM块。
-
该NVM区块的大小为DemEventParameter容器数量+ 1,除以8,分数四舍五入的整数
-
Dem_SetEventAvailable()要在Dem_Init()初始化之后运行,因为要先读取NVM中的数据。
-
DemGeneral/DemAvailabilitySupport 设置为TRUE。
DemAvailabilitySupport:定义是否启用对事件可用性的运行时配置的支持。如果启用,将提供相应的API,用于在运行时切换事件的可用性。
DemBswApiVersion:集成BSW堆栈API的AUTOSAR版本
DemBswApiVersionFiM:集成FiMAPI的AUTOSAR版本
DemBswApiVersionNvM:集成NvMAPI的AUTOSAR版本
DemBswErrorBufferSize:处理任务的队列大小。避免队列溢出的情况,配置值小于单次运行周期的监视器的最大数。
DemClearDTCLimitation:清除DTC的配置;
-
ALL_SUPPORTED_DTCS:支持所有的DTC值。
-
ONLY_CLEAR_ALL_DTCS: 仅支持清除所有DTC(DTCGroup 0xFFFFFF)。
-
ONLY_CLEAR_OBDII_AND_ALL_DTCS: 仅支持清除所有DTC(DTCGroup 0xFFFFFF ,0x000000)。
-
ONLY_CLEAR_SINGLE_AND_ALL_DTCS:支持DTC编号清除 和清除所有DTC(DTC Group 0xFFFFFF)。
-
ONLY_CLEAR_WWHOBD_AND_ALL_DTCS: 仅支持清除所有DTC (DTC Groups 0xFFFF33, 0xFFFFFF).
DemClearDTCBehavior:定义Dcm回复肯定响应的时机。
-
VOLATILE:Dem清除RAM中的DTC数据之后,Dcm回复肯定响应。
-
NONVOLATILE_TRIGGER:Dem清除RAM中数据并且启动NVM清除数据,Dcm回复肯定响应。
-
NONVOLATILE_FINISH: Dem清除RAM中数据,同时启动并完成NVM清除数据,Dcm回复肯定响应。
DemClearDTCRuntimeLimit:清除DTC的运行时间限制。此参数存在,清除DTC的时间应小于该值。
DemCompiledConfigId:若设置,Dem在下次初始化的时候清除NVM数据。
DemCompiledPostbuildCrc:定义所有构建的配置项的特定检验和。若配置改变,Dem通常会丢弃之前的NV数据。
DemCompiledPostbuildCrcMode:定义所有构建的配置项的特定检验和计算模式;
-
AUTOMATIC:由DaVinci Configurator5计算校验和值。
-
MANUAL:用户定义校验和。当配置更改不清除NvData时使用此设置。当存储的非易失性数据与当前配置不兼容时,请注意手动更改校验和。
DemDtcStatusAvailabilityMask:Dem支持的DTC状态位掩码。
DemDataElementDefaultEndianness:定义数据元素的字节序。
DemDcmSupport:定义是否支持Dcm配置。
-
若不设置或者设置为TRUE,Dem会提供Dem_Dcm.h接口给Dcm模块。
-
若设置为FALSE,Dem认为系统没有Dcm模块,Dem不会提供Dem_Dcm.h接口给Dcm模块。
DemDebounceCounterBasedSupport:定义是否支持计数消抖。
DemDebounceTimeBasedSupport:定义是否支持计时消抖。
DemDevErrorDetect:定义是否支持开发错误检测。若使能,集成错误将报告给DET模块(例如,调用带有无效参数的api会导致Dem模块的故障)。
DemEnableConditionSupport:定义是否支持启动条件检查。使能该功能必须设置选项DemEnableConditionGroupRef
DemEventCombinationSupport:是否支持多个事件合并一个DTC上报。
-
DISABLED:不支持事件组合。
-
TYPE1:多个事件可以组合成一个DTC。DTC定义存储的数据。
-
TYPE2:多个事件可以组合成一个DTC。每个事件定义存储的数据。所请求的DTC的每个存储事件的数据被合并并报告给Dcm。
DemEventDisplacementFallbackStrategy:定义事件替代的回退策略:
-
DISCARD_NEW_EVENT:如果没有找到替换的候选对象,则会默默地丢弃一个新事件。AUTOSAR定义的标准行为。
-
DISPLACE_OLDEST_EVENT:如果找不到更好的替换候选,则无条件替换最老的事件。
DemEventDisplacementStrategy:定义事件替代的策略,当事件内存当前被完全填满时的事件替换策略。
-
NONE:不置换。如果事件内存被填满,新事件总是会立即被替换。
-
请注意,对于这种情况,惟一支持的回退策略是DISCARD_NEW_EVENT。
-
PRIO_OCC:可置换。如果事件内存已被填充,则选择优先级最低的DTC。如果多个dtc共享这个最低优先级,则选择最老的dtc。
-
FULL: 可置换。如果事件内存已被填充,则选择优先级最低的DTC。如果多个DTC共享这个最低优先级,则选择最老的被动DTC。如果最低优先级列表中没有被动DTC,则选择最老的活动但未测试的DTC。
-
LEGACY_403:根据Autosar 4.0.3中定义的置换行为做向量扩展。如果事件内存已被填充,则选择优先级最低的DTC。如果多个DTC共享这个最低优先级,则选择最老的被动DTC。
DemSupportStorageIndependentCycleCounters:定义是否支持单独存储周期计数。
-
若使能,Dem单独存储FAILED_CYCLES和FAULT_PENDING_COUNTER。不过前提条件是配置一个DemNvRamBlockIdType为"DEM_NVBLOCK_CYCLECOUNTER"的NVM块。长度为DTC数量+2字节。
-
若禁用或不设置,事件只能在RAM中存储相关数据。
-
注:将Dem/DemGeneral/DemExtendedDataVisibility设置为“ALL_DTC”才可以充分利用该功能。
DemEventMemoryEntryStorageTrigger:定义事件确认的时机
-
CONFIRMED:当事件对应的DTC确认(状态位bit3由0到1)时,事件会被存储
-
FDC_THRESHOLD:当故障检测计数器超过DemDebounceCounterPreconfirmedThreshold时,事件会被存储
-
PENDING:当事件对应的DTC挂起(状态位bit2由0到1)时,事件会被存储
-
TEST_FAILED:当事件对应的DTC失败(状态位bit0由0到1)时,事件会被存储
-
注:当设置FDC_THRESHOLD时,内部消抖监视器就不会存储预失效的事件数据
DemEvMemOverflowIndicationSupport:定义是否开启EvMemOverflowIndication内部接口。
- 若禁用,则当事件内存溢出后不调用相应的接口
DemEventStorageTrigger:该参数不支持,兼容DemEventMemoryEntryStorageTrigger参数
DemExtendedDataCapture:定义采集扩展数据的时机
-
TESTFAILED:在SetEventStatus被调用时采集,不支持该参数
-
MEMORY_STORAGE:在下一个Dem任务周期中采集
DemExtendedDataVisibility:定义上报扩展数据的时机
-
ALL_DTC:扩展数据的上报独立于内部存储数据。
-
STOREDONLY:上报内部存储中相应的DTC的扩展数据
DemFreezeFrameCapture:定义采集快照数据的时机
-
TESTFAILED:在SetEventStatus被调用时采集,不支持该参数
-
MEMORY_STORAGE:在下一个Dem任务周期中采集
DemGeneralCallbackMonitorStatusChangedFnc:定义MonitorStatus状态改变的回调函数接口;需要配置DemGeneral/DemTriggerFiMReports参数。
DemGeneralDiagnosticInfoSupport:是否支持通用诊断接口,
DemGeneralInterfaceSupport:定义是否支持通用接口支持。若开启,使用GeneralEvtInfo、GeneralCallbackEventDataChanged、GeneralCallbackEventStatusChange接口;若关闭,使用DemGeneralDiagnosticInfoSupport、DemTriggerGlobalEventDataChangedCallback、DemTriggerGlobalEventStatusChangedCallback回调函数。
DemIgnitionCycleFunctionIdRef:定义点火循环异常时FID是否被禁用。
DemImmediateNvStorageLimit:定义NVM立即写的限制数量,DemGeneral/DemImmediateNvStorageSupport和DemConfigSet/DemDTCClass/DemImmediateNvStorage需要开启。
DemImmediateNvStorageSupport:定义是否支持NVM立即写操作
DemJ1939Support:是否支持J1939协议,需要设置DemGeneral/DemGeneralJ1939参数。
DemLatchTestFailedBehavior:定义有DemEventLatchTestFailed的事件的行为。
-
DEM_LATCH_TF_ONLY_THIS_CYCLE:当事件失败后,当前周期忽略PASSED结果。
-
DEM_LATCH_TF_CONFIRMED_AND_THIS_CYCLE:当事件失败后,当前周期忽略PASSED结果。同时事件确认后,不处理PASSED结果,因此该不会老化,只能通过清除DTC。
DemMILIndicatorRef:定义MIL指标
DemMaxNumberEventEntryMirror:不支持该参数
DemMaxNumberEventEntryOBDFreezeFrame:定义同时存储事件OBD II快照数据最大数量
DemMaxNumberEventEntryPermanent:定义永久存储的最大数量
DemMaxNumberEventEntryPrimary:定义主存储的最大数量,即19服务上报的存储。
DemMaxNumberEventEntrySecondary:定义辅助存储的最大数量,即用户定义内存。
DemMaxNumberPrestoredFF:定义预存储快照的最大数量
DemMaxNumberTimeSeriesSnapshots:该参数不支持
DemMemoryBlockDistribution:该参数无效
DemMultipleTripSupport:定义是否支持多任务。若开启,事件确认会根据DemEventFailureCycleCounterThreshold参数,同时进程中的计数器会运用于所有事件;若关闭,事件中的DemEventFailureCycleCounterThreshold参数只会有0和1。
DemNvSynchronizeSupport:定义是否支持Nv同步,若开启,dem模块提供Dem_RequestNvSynchronization接口。
DemOBDSupport:定义支持OBD协议模式。
-
DEM_OBD_NO_OBD_SUPPORT:不支持OBD模式,Dem运行在UDS模式。
-
PRIMARY_ECU:支持OBD模式,Dem以主ECU模式运行。
-
DEP_SEC_ECU/MASTER_ECU:不支持这两个参数。
DemOccurrenceCounterProcessing:定义计数器增加的时机。TF (TestFailed):事件产生testfailed时加1;CDTC (Confirmed):事件被确认时加1。
DemOperationCycleProcessing:该参数已经弃用
DemOperationCycleStatusStorage:定义操作周期状态在电源周期内是否可用。
DemMasterOsApplicationRef:定义Dem分区。若未配置,使用“0”替代。
DemPTOSupport:不支持该参数
DemReportSuppressedDTCsInService19x0A:定义190a服务是否上报抑制dtc
DemResetDebounceBehavior:定义复位消抖计数值的时机。
-
DEM_RESET_DEBOUNCE_ON_DISABLE_ENABLE_CONDITIONS:当事件条件不满足时,直接复位消抖计数值
-
DEM_RESET_DEBOUNCE_ON_ENABLE_ENABLE_CONDITIONS:当事件条件不满足时,并且事件条件达到实现的值,复位消抖计数值。
-
注:只有DemDebounceBehavior==DEM_DEBOUNCE_RESET的事件才有效
DemResetTestFailedOnOperationCycleStart:定义在当前周期内是否复位testfailed。
DemRestartCycleOnInitRef:自动冲去带有Dem_PreInit()的引用周期
DemRetryStorageSupport:定义是否支持重试存储功能。
DemSafeBswChecks:定义是否进行安全检查
DemResetConfirmedBitOnOverflow:定义当事件存储被取代时,confirmed位是否复位。若启动,当被取代时,confirmed复位,并立即老化。若禁用,当被取代时,confirmed不会复位,一直等到该事件分配新的老化计数器时才能从头开始复位。
DemPendingDtcProcessing:定义Pending状态位相应的行为。
-
STOREDONLY:当内存成功分配时,Pending置1;当内存被取代时,Pending置0。
-
ALL_DTC:Pending状态位独立于内存存储。防止内存被取代修改Pending状态位。
DemStatusBitStorageTestFailed:定义是否存储testfailed状态位。
DemStatusBitHandlingTestFailedSinceLastClear:定义老化和内存替代后是否设置“TestFailedSinceLastClear”状态位。
-
AGING_AND_DISPLACEMENT:在事件存储时“TestFailedSinceLastClear”状态位置1,老化、清除和内存替代时“TestFailedSinceLastClear”状态位置0。
-
NORMAL:只有清除DTC后“TestFailedSinceLastClear”状态位置0
-
AGING:只有清除DTC和老化后“TestFailedSinceLastClear”状态位置0
DemUserControlledWirSupport:定义是否支持外部接口修改WarningIndicatorRequest状态位
DemUserControlledWirBehavior:定义外部接口修改WarningIndicatorRequest状态位的机制
-
DISABLED_DURING_CONTROLDTCSETTING:当ControlDTCSetting禁用DTC存储时,API Dem_SetWIRStatus将返回E_NOT_OK。
-
ENABLED_DURING_CONTROLDTCSETTING:当ControlDTCSetting禁用DTC存储时,API Dem_SetWIRStatus将设置相应的状态。
-
注:前提是DemUserControlledWirSupport设置为true
DemWarningIndicatorRequestedProcessing:定义WarningIndicatorRequest状态位的行为。
-
STOREDONLY:仅在存储申请成功后WarningIndicatorRequest状态位置1
-
ALL_DTC:WarningIndicatorRequest状态位独立于内存存储
DemStorageConditionSupport:定义是否开启存储条件。同时需要配置DemConfigSet/DemEventParameter/DemEventClass/DemStorageConditionGroupRef
DemSupportAgingForAllDTCs:定义所有DTC老化时是否独立于内存存储
DemSupportService19x16:是否支持1916(reportDTCExtDataRecordByRecordNumber)服务
DemSuppressionSupport:定义抑制模式
-
DTC_SUPPRESSION:仅支持DTC抑制
-
EVENT_AND_DTC_SUPPRESSION:支持DTC和Event的抑制,等同于DTC抑制
-
EVENT_SUPPRESSION:支持Event抑制,等同于不抑制
-
NO_SUPPRESSION:不抑制
DemTaskTime:配置任务的执行周期
DemDebounceTimeLowResThreshold:定义低速定时器的最小消抖时间。
DemTriggerControlDTCSetting:如果DEM处理85服务,由DEM触发;如果不支持RTE(DemUseRte == False),Appl_Dem_CBControlDTCSetting_ControlDTCSettingChanged函数会被DEM调用,并且需要自己实现该函数。
DemTriggerDcmReports:定义状态标志位改变时是否通知DCM模块(14清除不通知)。
DemTriggerDltReports:定义是否开启诊断日志和跟踪的通知。
DemTriggerDtcStatusChangedCallback:定义全局禁用DTC状态的通知
DemTriggerEventDataChangedCallback:定义全局禁用EVENT数据的通知
DemTriggerEventStatusChangedCallback:定义全局禁用EVENT状态的通知
DemTriggerFiMReports:定义是否开启通知FIM
DemTriggerFiMReportsExtended:定义是否开启通知FIM,用于Vector FiM的OBD扩展。
DemTriggerGlobalEventDataChangedCallback:定义事件数据变化时是否需要调用全局接口
-
若未设置,DEM需要调用全局接口;
-
若设置为TRUE,DEM会调用内部接口。未实现RTE接口,需要实现Appl_Dem_GeneralCBDataEvt_EventDataChanged函数;
-
若设置为FALSE,DEM不需要调用接口
DemTriggerGlobalEventStatusChangedCallback:定义事件状态变化时是否需要调用全局接口
-
若未设置,DEM需要调用全局接口;
-
若设置为TRUE,DEM会调用内部接口。未实现RTE接口,需要实现Appl_Dem_GeneralCBStatusEvt_EventStatusChanged函数;
-
若设置为FALSE,DEM不需要调用接口
DemTriggerMonitorInitBeforeClearOk:不支持该参数
DemTriggerMonitorInitForEnableConditions:定义启用条件重新激活监控时是否需要初始化监视器。
DemTypeOfDTCSupported:定义Dem_GetTranslationType返回的格式。
DemTypeOfFreezeFrameRecordNumeration:定义如何分配记录快照号
-
CALCULATED:快照记录号由1到设置最大值。
-
CONFIGURED:快照记录号来自DemFreezeFrameRecNumClassRef规则。
DemUseMemcopyMacros:定义是否使用VStdLib
DemUseMultiPartitionFiM:定义是否使用Multi Partition FiM。若使用Dem在初始化时调用FiM_DemInitMaster和FiM_DemInitSatellite而不是FiM_DemInit函数。
DemUseNvm:定义是否使用Nvm,一般都是使用
DemUseRte:定义是否使用Rte,一般都是使用
DemUserConfigFile:定义用户外部配置文件的路径
DemUserConfigFilePost:定义用户外部配置文件的路径
DemUserDefinedCompareAndSwap:定义用户是否实现硬件优化。若禁用,使用DEM内部优化,若开启,需要外部实现。
DemVersionInfoApi:定义API的版本信息
DemHeaderFileInclusion:定义DEM模块需要调用的外部文件
DemOsApplicationRef:定义分区引用列表