求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
AUTOSAR实战教程
1.AUTOSAR相关知识
1. 老板说项目要上AUTOSAR,我慌得一批
2. 我淡定地撸了一遍AUTOSAR的基本概念
3. AUTOSAR初学者最想搞懂的东西
2.AUTOSAR理论基础
AUTOSAR架构
1. AUTOSAR架构的故事(干货)
2. AUTOSAR架构之通信服务(干货)
3. 这次我通过Interface来贯穿整个AUTOSAR架构
AUTOSAR启动与初始化
1. 解析AUTOSAR Startup
2.AUTOSAR架构中的配置文件
3.SWC详解与配置实现
1.AUTOSAR Port原理概念详解
4.BSW原理和实战演练
1. AUTOSAR折磨,从新建工程开始
2. AUTOSAR的BswM模块详解
3. 图解AUTOSAR NVM模块
4. AUTOSAR架构的 Pdu Router
5. AUTOSAR中的vLinkGen可以干嘛
6. MCAL Wdg模块解析
7. MCAL PWM Module详解
8. AUTOSAR的Memory是如何设计的?
9. AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
10. AutoSAR,在多核汽车MCU中如何运行
11. AUTOSAR架构中的Configurator
12. AUTOSAR中的Fee
5.MCAL应用配置
1.ADC模块的配置
2.MCU模块的配置
3.PWM模块的配置
 
 
AUTOSAR NvM Block的Native、Redundant和Dataset有什么区别?
作者:嵌入式软件实战派
1666 次浏览
17次  

AUTOSAR的NvM Block有三种Native、Redundant和DataSet,用得最多的是Native,但你知道其他两种是干什么的吗?

AUTOSAR NVM(Non-Volatile Memory)是AUTOSAR标准中定义的一种用于存储非易失性数据的机制。在AUTOSAR NVM中,数据被存储在一个或多个NVM块中。每个NVM块由一个或多个NVM数据集组成,可以存储不同类型的数据。

图片

在AUTOSAR NVM块中的三种类型,它们之间的区别如下:

1.Native

Native数据是NVM块中存储的原始数据,是应用程序需要读写的数据。Native数据只在NVM块中存储一份,如果数据损坏或丢失,将无法恢复。因此,在写入Native数据时,需要确保数据的可靠性和一致性。

举例说明:江湖中的《九阳神功》只有一份,弄丢了就丢了。

图片

2.Redundant

Redundant数据是为了增加数据的可靠性而存储在NVM块中的备份数据。与Native数据不同,Redundant数据通常存储在NVM块中的不同位置,以增加数据的冗余度。如果Native数据损坏或丢失,可以使用Redundant数据进行恢复。在写入Redundant数据时,需要确保数据的可靠性和一致性,以确保Redundant数据可以成功地用于数据恢复。

举例说明:江湖中,如果你巧合得到了一份《葵花宝典》,你也很清楚这玩意的“魅力”,你不想拥有它也不希望它失传,于是偷偷抄了一份,把原件扔到江湖中,爱咋咋地。如果江湖中的原件丢了,那你可以偷偷拿出你的手抄稿慢慢研究,咳咳~~

图片

3.DataSet

DataSet数据是AUTOSAR NVM中的一个特殊数据类型,它是一组数据的集合。DataSet数据通常用于存储应用程序的配置数据或状态数据,例如车辆参数、故障码等。与Native和Redundant数据不同,DataSet数据可以在应用程序运行期间进行读写,并且可以使用AUTOSAR配置工具进行配置和管理。

DataSet数据由一个或多个DataBlock组成,每个DataBlock由一个或多个DataElement组成。在写入DataSet数据时,需要确保数据的可靠性和一致性,并且需要考虑到数据的版本管理和数据更新等问题。

举例说明:江湖中的《降龙十八掌》有好多个版本,例如有洪七公版、郭靖版和乔峰版,每个版本都有点不一样。

图片

总之,在AUTOSAR NVM中,Native数据是应用程序需要读写的原始数据,Redundant数据是为了增加数据的可靠性而存储的备份数据,DataSet数据是一组数据的集合,通常用于存储配置数据或状态数据,一般可以是车厂不同车型的配置数据。

理论是这个样子,话也是这么说,但总得拿出来遛一遛,看看实际的样子。

于是乎,上代码、改配置,直接运行试试效果:

以下工程验证还是基于《 AUTOSAR NvM模块配置详解 》案例来修改。

1.Native

这个在原来教程有展示了,也是用得比较多一种,就配置成Native就好了,在EEPROM或FLASH中存储的数据只有一份。

它的读写示意图是这样的:

图片

图片

2.Redundant

Redundant就是冗余、重复的意思,最直观的理解就是有多一个备份Block。这样可以让数据更加可靠、容错性更好,可用性也更好。

注意:只要数据了,备份每次都要重新同步的。

图片

实际案例中的写入过程动图是这样的:

图片

在读的时候,读到其中一份是正确的就OK了

图片

真实的读取过程也很简单:

图片

但是,如果从第一个Block读取的数据是错误的(例如CRC校验不正确),那么,它就会从备份Block去读取数据。以下,我故意将CRC部分改成别的错误值,其读出来后会校验CRC,发现错的,再尝试读取备份区域的数据:

图片

那么它的读取过程是怎样的呢?看动图:

图片

这样看来,这个非常适合用于存储非常重要的数据,例如用于功能安全场合。

3.DataSet

DataSet数据是一组数据,这组数据里面有很多份相互独立的数据。它并不像Redundant那样,这些数据即使会有些相似性,但都是不一样的,改动其中一份不会影响其他的。

DataSet的读写其实跟Native的基本一样,只是在操作之前需要调用 NvM_SetDataIndex 函数来指定要操作哪一个DataSet数据块。它的参数定义是这样的:

Std_ReturnType NvM_SetDataIndex(NvM_BlockIdType BlockId, uint8 DataIndex)

如果不调用这个 NvM_SetDataIndex 函数,默认情况下,是操作最前的那个数据块,跟Native的表现一致:

图片

如果操作第二块就是这样(起始地址是第一块的后面,紧挨着的):

图片

以上就是NvM Block的Native、Redundant和DataSet的区别了。

 



您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1666 次浏览
17次