日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/1/23 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 页式存储管理程序模拟_ADAS/AD开发12 - 数据存储管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

外部大型Flash主要存儲Mobileye芯片的VFP需要運行的程序和相關數據。

片上Flash主要存儲主MCU芯片的程序和相關數據,如圖1所示的Memory Map:

圖1 片上Flash的Memory Map

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

CodeFlash用于存儲代碼,包括BL和APP的程序代碼,以及相關的固定標定參數代碼。

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

NVRAM( Non-Volatile Random Access Memory) 又叫非易失性隨機訪問存儲器,指斷電后仍能保持數據的一種RAM。

一、KAM與KAMM

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

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

  • ECU第一次啟動時,KAMM負責將CodeFlash中對應KAM的參數數據加載到KAM區域,使KAM區域的參數有初始值。
  • 負責將NVRAM中(正在運行的APP程序中的相關參數,以結構體形式存在)與KAM相關的數據寫入KAM中,以及將KAM中的數據按優先權大小寫入NVRAM。需要提一點,APP程序不能改CodeFlash的,只能用Bootloader來刷寫。
  • 負責記錄KAM的寫入/擦除次數,使其不得超過NVM(主要指片上Flash)的最大寫入/擦除次數。
  • 二、EED策略詳解:

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

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

    三、KAM數據結構

    KAM的數據結構為了操作方便,一般也會按照功能邏輯上寫操作時機(Trigger timing)相似的方法進行分組,分成Type0、Type1、Type2和Type3等幾個不同的結構體,每個結構體里,封裝一組參數。當然,這里的Type0/1/2/3等結構體,跟之前的Block1/2/3/4頁沒有關系,Block1/2/3/4的大小都是16k以上級別的,而每個Type0/1/2/3結構體占用空間才1b~2kb。這些Type結構體是存儲在頁中的。

    分組結構體有不同的優先權,當幾個結構體同時需要讀寫時,會優先處理優先權最高的結構體。

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。