吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AUTOSAR Ea深度剖析

嵌入式軟件實戰派 ? 來源:嵌入式軟件實戰派 ? 2023-03-22 11:00 ? 次閱讀

我已經寫了很多關于AUTOSAR Memory Stack相關的文章教程了,初學者按照這些教程步驟去實操,入門進階是應該是沒問題的了。

AUTOSAR的Memory是如何設計的?

一圖讀懂AUTOSAR NvM(附pdf版文檔資源)

AUTOSAR NvM模塊配置詳解

AUTOSAR中的NvM、Ea和Eeprom之間是如何相互關聯的?

但是對于好學的人,怎么可以止步于此呢!我剛學AUTOSAR搞EEPROM的時候,遇到一堆問題,就想對Ea這個模塊刨根問底,看看其到底做了哪些功能。回想當初掉坑、苦惱摸索的日子,心覺甚是艱難,于是總結一下這個Ea模塊。

溫馨提示:本文會涉及或詳細講到以下內容:

分析AUTOSAR的Eeprom為什么效率比較低

如何將AUTOSAR Memory Stack移植到PC上模擬仿真

解讀Ea里面的磨損均衡算法

以gif動圖展現Eeprom的最終讀寫行為(文末有下載動圖的方法)

1.AUTOSAR Eeprom讀寫效率很低?

之前我搞這個玩意的時候,好不容易將這個NvM和EEPROM等配置好,生成代碼編譯通過運行OK,還真以為OK了,誰知高興早了。

如果對Ea里面的機制不了解的話,平時也不特別測試這個EEPROM的讀寫速度,很難發現這個效率問題。

之前,我們項目遇到一個問題,特意測試了下,從寫NvM開始,到實際EEPROM寫完返回Notification,就簡單寫幾個字節就花了超20ms。

一開始不可置信,特意查了EEPROM手冊,明明寫一個page時間是<4ms,這幾個字節也在一個page里面,怎么就花了數倍的時間!為了做個對比,直接拿個非AUTOSAR工程來試試,也就4ms上下。怎么會差別這么大?

為了搞清楚這個問題,一開始仿真看看這個過程在搞什么鬼,奈何這個NvM、Ea和EEPROM都是異步的,代碼也很復雜,就Ea一個模塊就15個C文件,沒法看下去。

84e14a26-c858-11ed-bfe3-dac502259ad0.png

擼碼擼了很久,最后找到EEPROM的末端函數,看看這個EEPROM寫入是如何進行的,里面傳遞的地址和數據到底是什么東西。

不看不知道,一看嚇一跳,寫一段Eeprom數據,除了有“寫”的接口調用,也有“讀”的接口調用,而且這個“寫”還不止寫一次……讓我瞬間懷疑人生了,還以為我調用了好多次寫接口。

因為這東西,搞得幾天沒覺好睡。為了搞清楚這Ea里面的行為,翻了很多AUTOSAR的官方文檔和Ea、Eeprom里面的源碼。雖然,能尋得一些皮毛,但是還是很不理解。

為了直觀地理解這個操作過程,還根據《RTOS內存分析動圖是怎么做的?(附源碼)》里面的方法,做出了幾個動圖。

例如,用了《AUTOSAR NvM模塊配置詳解》里面的例子,通過NvM接口往Eeprom寫入8個字節,其執行動作如下:

84ee561c-c858-11ed-bfe3-dac502259ad0.gif

其實,從這個圖可以看出,調用一些NvM的寫接口:

Rte_Call_NvMService_AC2_NvBlockNeed_8Bytes_WriteBlock(nvm_8bytes_wr_data);

其居然,對Eeprom進行了5次操作!可參考下圖每個小圖下面的Action描述。

85190ae2-c858-11ed-bfe3-dac502259ad0.png

由于Eeprom的最大寫入時間為4ms(我實驗的EEPROM是4ms,其他型號請參考對于的規格書),所以Eeprom_MainFunction的周期時間定義 為4ms,確保其執行是可以順利完成的。

從上面捕捉到的數據看,這個Eeprom的MainFunction至少執行了5次。所以,寫一次NvM不是和寫一次Eeprom時間等同的。

越搞越好奇,為什么寫個NvM要讀2次和寫3次Eeprom呢?,不是浪費時間嗎?

2.AUTOSAR 能否在PC上仿真測試?

為了徹底搞清楚這些過程動作,我不斷嘗試打log和仿真,很費時間,用起來很不爽。

想著,這AUTOSAR能否搬到PC上模擬?

整套AUTOSAR搬過去應該是非常困難的,因為涉及到很多硬件相關的接口。那么只是將AUTOSAR的Memory Stack(NvM、MemIf、Ea和Eeprom)搬到PC上運行,是否可行呢?

唯一跟硬件相關的只是Eeprom模塊調用的IIC接口了,把IIC接口打樁不就行了。然后將實際寫入EEPROM的數據重定向到PC上寫文件不就行了。

想想好像也不難,不難那就干起來。

開發編譯環境,我嘗試了微軟的visual studio IDE,用起來不爽,關鍵遇到一堆編譯錯誤,后來換GCC編譯(Windows上的Cygwin環境),順手寫了個Makefile。

一頓操作猛如虎,編譯調試二百五。

都怪當初沒好好學習,搞得現在將Makefile、Gcc編譯、Cygwin的環境等等統統研究了一番,也算是額外的收獲吧。

其實也很簡單,就兩步,而我走了很多彎路而已:

按這個思路搞下去,雖然要花一點點時間,你也會把AUTOSAR里面這幾個模塊的編譯依賴也搞清楚了,對學習AUTOSAR是挺有幫助的。

添加所需的C文件,包括:

NvM、MemIf、Ea、Eeprom模塊里所有的.c文件

配置生成的和Memory相關的文件,例如NvM_Cfg.c等

測試代碼,例如仿真工程理解的main.c等

解決編譯問題,gcc一個命令搞過去,肯定有很多編譯錯誤的,例如:

第一個就是頭文件找不到問題,通過gcc的-I參數指定路徑就可以了;

還有就是AUTOSAR里面定義的一些跟編譯選項有關的預編譯(例如#pragmaghs...這種是Greenhills用的)問題,屏蔽這些沒用的代碼即可

Rte.c里面很多內容編譯錯誤或者鏈接時找不到,這個只能把有用的函數或定義摳出來,重新放到一個文件里面,加入編譯,而Rte.c就不要包含到編譯選項了;

...

接下來最關鍵的就是Eeprom的讀寫接口了,因為我們就想通過這個看數據的,例如我是這樣模擬這個write接口的:

FILE* f = fopen("./EEP_MEM.data", "rb+"); if (f) { fseek(f, addr, SEEK_SET); int cur = ftell(f); fwrite(data, len, 1, f); fclose(f); } printf("EEPROM Write data to 0x%04X: ", addr); MEM_PRINT_DATA(data, len);

直接操作文件,病通過printf輸出log,絲滑一般順暢。

然后,把你想看的過程都輸出log,那么就可以得出我曾在《AUTOSAR NvM模塊配置詳解》就放出來過的log:

NVMTestWriteData:0001020304050607
Runnable_NvMcalled(1),ret=0
Runnable_NvMcalled(2),ret=0
Runnable_NvMcalled(3),ret=0
Runnable_NvMcalled(4),ret=0
EEPROMReaddatafrom0x000C:FF
Runnable_NvMcalled(5),ret=0
Runnable_NvMcalled(6),ret=0
EEPROMReaddatafrom0x0015:FF
Runnable_NvMcalled(7),ret=0
Runnable_NvMcalled(8),ret=0
Runnable_NvMcalled(9),ret=0
Runnable_NvMcalled(10),ret=0
Runnable_NvMcalled(11),ret=0
Runnable_NvMcalled(12),ret=0
EEPROMWritedatato0x000C:F0
Runnable_NvMcalled(13),ret=0
Runnable_NvMcalled(14),ret=0
Runnable_NvMcalled(15),ret=0
EEPROMWritedatato0x000D:0001020304050607
Runnable_NvMcalled(16),ret=0
Runnable_NvMcalled(17),ret=0
Runnable_NvMcalled(18),ret=0
EEPROMWritedatato0x0015:F0
Runnable_NvMcalled(19),ret=0
Runnable_NvMcalled(20),ret=0
Runnable_NvMcalled(21),ret=0
Runnable_NvMcalled(22),ret=0
Runnable_NvMcalled(23),ret=0
NvMNotifyJobFinished_NvBlockNeed_8Byte_JobFinished(7,0)
NVMTestWritefinish.

就這樣,NvM執行后對Eeprom的操作過程就一目了然了,為什么效率低也變得很清晰了。

那么,關鍵問題來了:為什么寫NvM有這么多操作,都是做什么用的?

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2735

    瀏覽量

    47753
  • 算法
    +關注

    關注

    23

    文章

    4630

    瀏覽量

    93364
  • AUTOSAR
    +關注

    關注

    10

    文章

    363

    瀏覽量

    21781

原文標題:AUTOSAR Ea深度剖析

文章出處:【微信號:embedded_sw,微信公眾號:嵌入式軟件實戰派】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    《C語言深度剖析》【超經典書籍】

    本帖最后由 zgzzlt 于 2012-8-16 14:23 編輯 《C語言深度剖析》【超經典書籍】
    發表于 08-02 08:59

    C語言深度剖析

    C語言深度剖析——一本關于C語言學習的教程,里面包含C語言編寫規范,各種變量指針用法等。以含金量勇敢挑戰國內外同類書籍
    發表于 08-14 11:36

    c語言深度剖析

    c語言深度剖析
    發表于 04-02 09:12

    陳正沖《C語言深度剖析

    陳正沖編寫的《C語言深度剖析》,挺經典,剛來論壇,多多指教~~
    發表于 08-17 12:06

    linux內核深度剖析,另附有光盤資料

    linux內核深度剖析,對于想學linux內核的人來說,絕對值得一看,另附有光盤資料。
    發表于 01-15 21:25

    【資料分享】C語言深度剖析

    C語言深度剖析
    發表于 10-16 15:16

    C語言深度剖析

    C語言深度剖析
    發表于 08-25 09:08

    C語言深度剖析

    C語言深度剖析[完整版].pdfC語言深度剖析[完整版].pdf (919.58 KB )
    發表于 03-19 05:11

    功能安全---AUTOSAR架構深度解析 精選資料分享

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析AUTOSAR的分層式設計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發表于 07-23 08:34

    AUTOSAR架構深度解析 精選資料推薦

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析目錄AUTOSAR架構深度解析
    發表于 07-28 07:40

    AUTOSAR架構深度解析 精選資料分享

    AUTOSAR架構深度解析本文轉載于:AUTOSAR架構深度解析AUTOSAR的分層式設計,用于支持完整的軟件和硬件模塊的獨立性(Indep
    發表于 07-28 07:02

    C語言深度剖析

    C語言深度剖析
    發表于 05-05 17:40 ?7次下載

    C語言深度剖析

    C語言深度剖析
    發表于 12-20 22:50 ?0次下載

    AUTOSAR Fee模塊配置詳解

    AUTOSAR Fee的配置跟Ea類似,方法都可以觸類旁通。
    的頭像 發表于 06-01 10:05 ?4848次閱讀
    <b class='flag-5'>AUTOSAR</b> Fee模塊配置詳解

    C語言深度剖析.zip

    C語言深度剖析
    發表于 12-30 09:20 ?5次下載
    英皇百家乐的玩法技巧和规则 | 大发888支付宝代充| 基础百家乐博牌规| 功夫百家乐的玩法技巧和规则| 新百家乐.百万筹码| 真人百家乐官网在线玩| E乐博百家乐官网现金网| 百家乐官网推广| 百家乐官网程序开户发| 百家乐官网群详解包杀| 百家乐分析绿色版| 玩百家乐技巧巧| 威尼斯人娱乐城信誉| 大发888游戏下载| 百家乐翻天粤语| 百家乐官网四式正反路| 百家乐官网赌场娱乐城大全| 玩百家乐官网都是什么人| 模拟百家乐游戏软件| 百家乐永利赌场娱乐网规则| 大发8888| 阳山县| 百家乐官网双层筹码盘| 百家乐官网平注常赢玩法技巧| 百家乐三珠连跳打法| YY百家乐的玩法技巧和规则| 百家乐返水1.2不限| 大发888客户端de 软件| 象山县| 东营区百家乐官网艺术团| 百家乐扑克牌耙| 大发888娱乐城开户| 必胜娱乐城| 娱乐城百家乐官网送白菜| 百家乐代理占成| 百家乐是娱乐场| 沂南县| 百家乐官网桌套装| 竞咪百家乐官网的玩法技巧和规则 | 百家乐游戏怎么刷钱| 大发888信誉888娱乐城|