AUTOSAR的NvM Block有三種Native、Redundant和DataSet,用得最多的是Native,但你知道其他兩種是干什么的嗎?
AUTOSAR NVM(Non-Volatile Memory)是AUTOSAR標(biāo)準(zhǔn)中定義的一種用于存儲(chǔ)非易失性數(shù)據(jù)的機(jī)制。在AUTOSAR NVM中,數(shù)據(jù)被存儲(chǔ)在一個(gè)或多個(gè)NVM塊中。每個(gè)NVM塊由一個(gè)或多個(gè)NVM數(shù)據(jù)集組成,可以存儲(chǔ)不同類型的數(shù)據(jù)。
圖見(jiàn)《一圖讀懂AUTOSAR NvM(附pdf版文檔資源)》
在AUTOSAR NVM塊中的三種類型,它們之間的區(qū)別如下:
Native
Native數(shù)據(jù)是NVM塊中存儲(chǔ)的原始數(shù)據(jù),是應(yīng)用程序需要讀寫的數(shù)據(jù)。Native數(shù)據(jù)只在NVM塊中存儲(chǔ)一份,如果數(shù)據(jù)損壞或丟失,將無(wú)法恢復(fù)。因此,在寫入Native數(shù)據(jù)時(shí),需要確保數(shù)據(jù)的可靠性和一致性。
舉例說(shuō)明:江湖中的《九陽(yáng)神功》只有一份,弄丟了就丟了。
Redundant
Redundant數(shù)據(jù)是為了增加數(shù)據(jù)的可靠性而存儲(chǔ)在NVM塊中的備份數(shù)據(jù)。與Native數(shù)據(jù)不同,Redundant數(shù)據(jù)通常存儲(chǔ)在NVM塊中的不同位置,以增加數(shù)據(jù)的冗余度。如果Native數(shù)據(jù)損壞或丟失,可以使用Redundant數(shù)據(jù)進(jìn)行恢復(fù)。在寫入Redundant數(shù)據(jù)時(shí),需要確保數(shù)據(jù)的可靠性和一致性,以確保Redundant數(shù)據(jù)可以成功地用于數(shù)據(jù)恢復(fù)。
舉例說(shuō)明:江湖中,如果你巧合得到了一份《葵花寶典》,你也很清楚這玩意的“魅力”,你不想擁有它也不希望它失傳,于是偷偷抄了一份,把原件扔到江湖中,愛(ài)咋咋地。如果江湖中的原件丟了,那你可以偷偷拿出你的手抄稿慢慢研究,咳咳~~
DataSet
DataSet數(shù)據(jù)是AUTOSAR NVM中的一個(gè)特殊數(shù)據(jù)類型,它是一組數(shù)據(jù)的集合。DataSet數(shù)據(jù)通常用于存儲(chǔ)應(yīng)用程序的配置數(shù)據(jù)或狀態(tài)數(shù)據(jù),例如車輛參數(shù)、故障碼等。與Native和Redundant數(shù)據(jù)不同,DataSet數(shù)據(jù)可以在應(yīng)用程序運(yùn)行期間進(jìn)行讀寫,并且可以使用AUTOSAR配置工具進(jìn)行配置和管理。
DataSet數(shù)據(jù)由一個(gè)或多個(gè)DataBlock組成,每個(gè)DataBlock由一個(gè)或多個(gè)DataElement組成。在寫入DataSet數(shù)據(jù)時(shí),需要確保數(shù)據(jù)的可靠性和一致性,并且需要考慮到數(shù)據(jù)的版本管理和數(shù)據(jù)更新等問(wèn)題。
舉例說(shuō)明:江湖中的《降龍十八掌》有好多個(gè)版本,例如有洪七公版、郭靖版和喬峰版,每個(gè)版本都有點(diǎn)不一樣。
總之,在AUTOSAR NVM中,Native數(shù)據(jù)是應(yīng)用程序需要讀寫的原始數(shù)據(jù),Redundant數(shù)據(jù)是為了增加數(shù)據(jù)的可靠性而存儲(chǔ)的備份數(shù)據(jù),DataSet數(shù)據(jù)是一組數(shù)據(jù)的集合,通常用于存儲(chǔ)配置數(shù)據(jù)或狀態(tài)數(shù)據(jù),一般可以是車廠不同車型的配置數(shù)據(jù)。
理論是這個(gè)樣子,話也是這么說(shuō),但總得拿出來(lái)遛一遛,看看實(shí)際的樣子。
于是乎,上代碼、改配置,直接運(yùn)行試試效果:
以下工程驗(yàn)證還是基于《AUTOSAR NvM模塊配置詳解》案例來(lái)修改。
Native
這個(gè)在原來(lái)教程有展示了,也是用得比較多一種,就配置成Native就好了,在EEPROM或FLASH中存儲(chǔ)的數(shù)據(jù)只有一份。
它的讀寫示意圖是這樣的:
Redundant
Redundant就是冗余、重復(fù)的意思,最直觀的理解就是有多一個(gè)備份Block。這樣可以讓數(shù)據(jù)更加可靠、容錯(cuò)性更好,可用性也更好。
注意:只要數(shù)據(jù)了,備份每次都要重新同步的。
實(shí)際案例中的寫入過(guò)程動(dòng)圖是這樣的:
在讀的時(shí)候,讀到其中一份是正確的就OK了
真實(shí)的讀取過(guò)程也很簡(jiǎn)單:
但是,如果從第一個(gè)Block讀取的數(shù)據(jù)是錯(cuò)誤的(例如CRC校驗(yàn)不正確),那么,它就會(huì)從備份Block去讀取數(shù)據(jù)。以下,我故意將CRC部分改成別的錯(cuò)誤值,其讀出來(lái)后會(huì)校驗(yàn)CRC,發(fā)現(xiàn)錯(cuò)的,再嘗試讀取備份區(qū)域的數(shù)據(jù):
那么它的讀取過(guò)程是怎樣的呢?看動(dòng)圖:
這樣看來(lái),這個(gè)非常適合用于存儲(chǔ)非常重要的數(shù)據(jù),例如用于功能安全場(chǎng)合。
DataSet
DataSet數(shù)據(jù)是一組數(shù)據(jù),這組數(shù)據(jù)里面有很多份相互獨(dú)立的數(shù)據(jù)。它并不像Redundant那樣,這些數(shù)據(jù)即使會(huì)有些相似性,但都是不一樣的,改動(dòng)其中一份不會(huì)影響其他的。
DataSet的讀寫其實(shí)跟Native的基本一樣,只是在操作之前需要調(diào)用NvM_SetDataIndex函數(shù)來(lái)指定要操作哪一個(gè)DataSet數(shù)據(jù)塊。它的參數(shù)定義是這樣的:
Std_ReturnType NvM_SetDataIndex(NvM_BlockIdType BlockId, uint8 DataIndex)
如果不調(diào)用這個(gè)NvM_SetDataIndex函數(shù),默認(rèn)情況下,是操作最前的那個(gè)數(shù)據(jù)塊,跟Native的表現(xiàn)一致:
如果操作第二塊就是這樣(起始地址是第一塊的后面,緊挨著的):
以上就是NvM Block的Native、Redundant和DataSet的區(qū)別了。
審核編輯 :李倩
-
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4169瀏覽量
85479 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1197瀏覽量
24590 -
DataSet
+關(guān)注
關(guān)注
0文章
5瀏覽量
2189
原文標(biāo)題:AUTOSAR NvM Block的Native、Redundant和Dataset有什么區(qū)別?
文章出處:【微信號(hào):embedded_sw,微信公眾號(hào):嵌入式軟件實(shí)戰(zhàn)派】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論