日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理

發(fā)布時(shí)間:2024/1/23 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文屬于ADAS控制器開(kāi)發(fā)系列。以智能前視攝像頭模塊為基礎(chǔ)。主要介紹下ADAS/AD ECU的存儲(chǔ)topic。

數(shù)據(jù)存儲(chǔ)與管理這個(gè)系統(tǒng)BB(Building Blocks),主要是定義控制器模塊的存儲(chǔ)機(jī)制。在智能前視攝像頭模塊中,一般有三個(gè)存儲(chǔ)位置,即MCU芯片中的RAM、片上Flash (Embedded Flash Memory)和位于MCU外部的一個(gè)大型Flash芯片。其中,片上Flash和外部大型Flash就叫做該控制器模塊的NVM。所謂NVM,即Non-volatile memory,非易失存儲(chǔ)器,具有非易失、按字節(jié)存取、存儲(chǔ)密度高、低能耗、讀寫(xiě)性能接近DRAM,但讀寫(xiě)速度不對(duì)稱(chēng),壽命有限。

外部大型Flash主要存儲(chǔ)Mobileye芯片的VFP需要運(yùn)行的程序和相關(guān)數(shù)據(jù)。

片上Flash主要存儲(chǔ)主MCU芯片的程序和相關(guān)數(shù)據(jù),如圖1所示的Memory Map:

圖1 片上Flash的Memory Map

如上圖所示,片上Flash包括CodeFlash、DataFlash和NVRAM三大片區(qū)域。

CodeFlash用于存儲(chǔ)代碼,包括BL和APP的程序代碼,以及相關(guān)的固定標(biāo)定參數(shù)代碼。

DataFLash包括兩部分,空間較小的那部分存儲(chǔ)一些基本信息,例如制造相關(guān)信息、SBAT相關(guān)信息、TAC相關(guān)信息等。空間較大的那部分區(qū)域則是用來(lái)做模擬EEPROM。這部分區(qū)域主要有軟件層面的一個(gè)叫做KAMM(Keep-Alive Memory Manager)的模塊來(lái)管理,因此這部分空間也叫KAM(Keep-Alive Memory)空間。

NVRAM( Non-Volatile Random Access Memory) 又叫非易失性隨機(jī)訪問(wèn)存儲(chǔ)器,指斷電后仍能保持?jǐn)?shù)據(jù)的一種RAM。

一、KAM與KAMM

KAM空間在存儲(chǔ)策略上采用模擬EEPROM存儲(chǔ)策略(也叫EED存儲(chǔ)策略,即EEPROM Emulation Driver,EEPROM仿真驅(qū)動(dòng)器)。

而KAMM(Keep-Alive Memory Manager),則:

  • ECU第一次啟動(dòng)時(shí),KAMM負(fù)責(zé)將CodeFlash中對(duì)應(yīng)KAM的參數(shù)數(shù)據(jù)加載到KAM區(qū)域,使KAM區(qū)域的參數(shù)有初始值。
  • 負(fù)責(zé)將NVRAM中(正在運(yùn)行的APP程序中的相關(guān)參數(shù),以結(jié)構(gòu)體形式存在)與KAM相關(guān)的數(shù)據(jù)寫(xiě)入KAM中,以及將KAM中的數(shù)據(jù)按優(yōu)先權(quán)大小寫(xiě)入NVRAM。需要提一點(diǎn),APP程序不能改CodeFlash的,只能用Bootloader來(lái)刷寫(xiě)。
  • 負(fù)責(zé)記錄KAM的寫(xiě)入/擦除次數(shù),使其不得超過(guò)NVM(主要指片上Flash)的最大寫(xiě)入/擦除次數(shù)。
  • 二、EED策略詳解:

  • 將KAM(Keep-Alive Memory)空間劃分成四個(gè)頁(yè)(EEPROM Block),其中Block0=Block1=16k,Block2=Block3=32k大小。
  • KAM采用EDD策略,因此只支持頁(yè)操作,要?jiǎng)h除就整個(gè)頁(yè)的刪;不能像正常Flash那樣,按位(bit)來(lái)讀、寫(xiě)、刪。
  • 這4個(gè)頁(yè),每個(gè)頁(yè)的首地址,包含每頁(yè)的標(biāo)志位,記錄該頁(yè)的狀態(tài),一般有三種標(biāo)志位:Active、Alternate和Erased。被這三種標(biāo)記位標(biāo)記的頁(yè),分別稱(chēng)為活動(dòng)頁(yè)(Active)、備用頁(yè)(Altenate)和已擦除頁(yè)(Erased)。活動(dòng)頁(yè)代表正使用(正在讀寫(xiě))的頁(yè);備用頁(yè)代表一旦活動(dòng)頁(yè)寫(xiě)滿,可隨時(shí)將活動(dòng)頁(yè)中的有效數(shù)據(jù)copy到該頁(yè)中,然后擦除之前的活動(dòng)頁(yè)(擦的比較)。
  • 第3條上加粗了“有效數(shù)據(jù)”四個(gè)字,為啥要將活動(dòng)頁(yè)中的有效數(shù)據(jù)復(fù)制?難道有無(wú)效數(shù)據(jù)存在???事實(shí)上這就是FLash模擬EEPROM的精髓所在。如果是在EEPROM中存數(shù)據(jù),那很簡(jiǎn)單,給個(gè)地址指針,要讀要寫(xiě)直接操作啊,每次寫(xiě)一次,就更新一次那個(gè)地址的存儲(chǔ)信息就好了。比如有個(gè)參數(shù)vehiclespeed,vehiclespeed也是指針,指向指針的地址是0x1111,數(shù)值80kph,想更改為100kph,如果是EEPROM,那簡(jiǎn)單,直接改0x1111地址的值就可以了。但是Flash想寫(xiě)數(shù)據(jù),就必須先擦除操作(先擦除后寫(xiě)入原則)為了減少擦除次數(shù)(況且擦除時(shí)間很長(zhǎng),你也等不起啊),不想因?yàn)楦囊粋€(gè)數(shù)據(jù)的值,就擦除一次,因此設(shè)置了一個(gè)虛擬地址和數(shù)值,例如vehicle speed和80kph,當(dāng)想“修改”該數(shù)值時(shí),實(shí)際上不是真修改,而是讓虛擬地址會(huì)指向同一個(gè)頁(yè)內(nèi)的、未使用的、擦除過(guò)了的區(qū)域直接進(jìn)行寫(xiě)操作(滿足了先擦除后寫(xiě)入原則),再寫(xiě)一個(gè)100kph進(jìn)去。這樣不就偷懶了一次,少了一次擦寫(xiě)啦。而且,老的80kph數(shù)據(jù),和新的100kph數(shù)據(jù)都存在于該活動(dòng)頁(yè)當(dāng)中。不過(guò)系統(tǒng)可以智能的知道,100kph是最新數(shù)據(jù),假如需要讀vehicle speed數(shù)據(jù)時(shí),系統(tǒng)不會(huì)再去找那個(gè)80kph,而是直接找100kph這個(gè)數(shù)。那么這個(gè)80kph就是無(wú)效數(shù)據(jù),100kph就是有效數(shù)據(jù)。等到這個(gè)頁(yè)都寫(xiě)滿了之后,把都是最新的參數(shù)拷貝到下一個(gè)頁(yè)中,那些老的不用的數(shù)值,一次性隨著整個(gè)頁(yè)的擦寫(xiě),而消失。(PS:感覺(jué)有點(diǎn)像iOS中的Auto Release Pool哇!攢一坨廢數(shù)據(jù)后,一起釋放)。
  • 圖1 DataFLash的Memory Map

    圖2 外部Flash與片上FLash的比較

    三、KAM數(shù)據(jù)結(jié)構(gòu)

    KAM的數(shù)據(jù)結(jié)構(gòu)為了操作方便,一般也會(huì)按照功能邏輯上寫(xiě)操作時(shí)機(jī)(Trigger timing)相似的方法進(jìn)行分組,分成Type0、Type1、Type2和Type3等幾個(gè)不同的結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體里,封裝一組參數(shù)。當(dāng)然,這里的Type0/1/2/3等結(jié)構(gòu)體,跟之前的Block1/2/3/4頁(yè)沒(méi)有關(guān)系,Block1/2/3/4的大小都是16k以上級(jí)別的,而每個(gè)Type0/1/2/3結(jié)構(gòu)體占用空間才1b~2kb。這些Type結(jié)構(gòu)體是存儲(chǔ)在頁(yè)中的。

    分組結(jié)構(gòu)體有不同的優(yōu)先權(quán),當(dāng)幾個(gè)結(jié)構(gòu)體同時(shí)需要讀寫(xiě)時(shí),會(huì)優(yōu)先處理優(yōu)先權(quán)最高的結(jié)構(gòu)體。

    超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

    總結(jié)

    以上是生活随笔為你收集整理的页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。