AUTOSAR官方规范:AUTOSAR_SWS_DiagnosticCommunicationManager.pdf
![](https://img-blog.csdnimg.cn/img_convert/be58ec2b79c2d2cff09ea73640e781cb.png)
dem在初始化的时候要有pre init和init的状态变化
初始化顺序:
①NVRAM Manager init -->②Dem_PreInit --> ③the restore of NVRAM data --> ④Dem_Init
![](https://img-blog.csdnimg.cn/img_convert/5bdb22c2352bfbef06df2555b820c5b9.png)
我的理解:我们会有一些具体的操作会导致Monitor检测功能的停止,这个时候就需要Monitor re-initialization了。
这些具体的操作主要有:
Dem_RestartOperationCycle
Dem_ClearDTC:对应uds 14 服务
Dem_SetEnableCondition
Dem_EnableDTCSetting 对应uds 85服务 enable/disable
Dem_SetStorageCondition 理解:StorageCondition是dtc event的status已经得出之后存入nvm之前需要满足的条件,如果走到StorageCondition的时候,StorageCondition条件不满足,则会重新Monitor re-initialization了。❓ 按照这样的理解:意思是StorageCondition满足之后,我才能读到dtc的status?还是说没走到StorageCondition之前,dtc status出结果之后我就可以读到dtc的status了?
如果同时有这些操作介入,只能re-initialization一次。并且每个操作都有一个优先级:
![](https://img-blog.csdnimg.cn/img_convert/b99d7b8ac2cb88782013eb335ce0a204.png)
Vectordem文档:TechnicalReference_Dem.pdf
来看一下Vector的实现
首先Vector对于多核实现定义了DemMaster和Dem Satellite
![](https://img-blog.csdnimg.cn/img_convert/a4858c64522bed81dda76d2f1972faf2.png)
初始化过程:
![](https://img-blog.csdnimg.cn/img_convert/a4fd949883a439099b69f78a7b6e435e.png)
![](https://img-blog.csdnimg.cn/img_convert/c444878a0ef9ba7720529a2930251bbd.png)
详细的启动流程:
对于第2点:仅仅BSW的dtc error可以通过Dem_SetEventStatus函数来上报dtc的状态,不建议swc也使用这个接口,官方推荐swc使用RTE的接口来上报。(RTE接口宏定义可以用字符串拼接的方法统一处理)
正常启动之后BswTask会周期调用Dem_MasterMainFunction()和Dem_SatelliteMainFunction()来遍历执行dem的操作。
![](https://img-blog.csdnimg.cn/img_convert/824a2ace8202fd63926f13c29bc6a812.png)
Davinci的具体实操:
dem init的流程要加到Ecuc里面
![](https://img-blog.csdnimg.cn/img_convert/db768165529ac48e4c13d1cb869b9c75.png)
需要把Dem_MasterMainFunction()和Dem_SatelliteMainFunction()添加到bsw的周期task里面
![](https://img-blog.csdnimg.cn/img_convert/93f83f023ddccfa368bb9992ab1a120e.png)