引言
閱讀MCAL源碼包中的源碼,猜測MCAL可能只是MCU底層SDK向AutoSAR的一個適配接口。為了驗證這個猜測,比較直接的做法,就是通過源碼“逆向”出軟件包中函數(shù)的調用關系,試圖歸納出實際的源碼設計層次架構。
為此,我想到多年前在CI服務器上生成SDK API手冊時,偶然發(fā)現(xiàn)的可以使用doxygen工具生成函數(shù)調用關系圖的方法,打算摩拳擦掌,“搞”它一下子。
準備和安裝軟件
doxygen 是跨平臺的工具,支持Linux、Windows、Mac OS X系統(tǒng)(本文將以Windows版本為例)。支持C語言在內的多種語言的分析,生成的幫助文檔格式可以是CHM、RTF、PostScript、PDF、HTML和Unixman page等。
它是一款優(yōu)秀的文檔自動生成工具,可以將代碼中的注釋轉換成幫助文檔(注釋格式要符合 doxygen 要求才行,F(xiàn)Fmpeg API Documentation 就是用doxygen自動生成的)。
本文使用doxygen的主要目的是生成函數(shù)調用關系圖,也可以通過靜態(tài)分析代碼,生成「頭文件引用關系圖」、「函數(shù)調用關系圖」、「繼承圖」以及「協(xié)作圖」來可視化文檔之間的關系。
生成Call Graph
運行 doxywizard.exe。
配置Wizard > Project頁面
配置doxygen工程的目錄、即將掃描源碼的目錄、產(chǎn)生輸出文件的目錄等。

配置Wizard > Mode頁面
選定目標源碼的編程語言,為C語言。

配置Expert > Project頁面
可以選擇生成中文文檔。

配置Expert > Build頁面
配置引用的對象類型。

配置Expert > Dot頁面
啟用DOT,啟用生成CALL_GRAPH,配置生成DOT的工具路徑。

分析并生成源碼

查看生成內容

查看生成的調用流圖
以查看Mcu.c文件的包含關系為例:

以查看Mcu_ClockInit()函數(shù)的調用關系為例:

查看MCU驅動模塊與其他模塊的關聯(lián)關系:

總結
在doxygen生成的網(wǎng)站中大略過了一遍YTM32 MCAL的調用關系流圖,以MCU驅動模塊為例,做了簡要的架構分析。MCU驅動模塊的實現(xiàn)源碼主要位于Mcu目錄中(另有Mcu_Cfg.h文件位于board目錄中),MCU驅動模塊還引用了Rte和Det目錄中的組件,以及Platform中關于硬件硬件的訪問。
根據(jù)AutoSAR MCAL的規(guī)范,Mcu和Det、Rte等組件位于同一層次,并存在相互調用的關系。MCU驅動模塊為了區(qū)分MCAL的同層調用關系和面向硬件的調用關系,專門在Mcu.c文件和Mcu_Lld.c文件中分兩層實現(xiàn)了MCU驅動模塊的功能:
在Mcu.c文件中,可以調用MCAL同層次組件的服務,向AutoSAR的BSW提供底層服務。向下通過調用Mcu_Lld.c文件中函數(shù),實現(xiàn)對本組件專屬硬件的訪問。
在Mcu_Lld.c文件中,不能調用MCAL層次上的服務,僅能訪問MCU硬件資源,并僅能又Mcu.c文件中的函數(shù)調用。
類似地,其他的MCAL層的驅動模塊也是如此分層地設計和實現(xiàn)。
如此,可以推斷,本文分析的YTM32B1ME05的MCAL軟件包為代表,若在YTM32B1MD14芯片(或其他車規(guī)MCU)的MCAL軟件包中,在基于這個層次架構實現(xiàn)MCAL軟件包中,需要適配的,也僅僅是Mcu_Lld.c文件這個層級上的源碼。
-
C語言
+關注
關注
183文章
7644瀏覽量
145601 -
AUTOSAR
+關注
關注
10文章
398瀏覽量
23653 -
驅動模塊
+關注
關注
0文章
67瀏覽量
14845 -
MCU控制
+關注
關注
0文章
49瀏覽量
7082 -
BSW
+關注
關注
0文章
15瀏覽量
3665
發(fā)布評論請先 登錄
Linux內核源碼之我見——內核源碼的分析方法
EMC分析設計層次的講解
層次分析法是什么
一文幫助初學者理解RTT設備架構層次關系
如何在RT-THREAD上生成doxygen呢
RT-studio使用doxygen生成代碼文檔經(jīng)驗分享
層次分析法的改進及應用
使用Doxygen工具時的七個關鍵提示
分享一個超級實用的源碼閱讀小技巧
AUTOSAR MCAL軟件的開發(fā)
從手寫代碼到AUTOSAR工具鏈_MCAL應用篇
使用doxygen分析MCAL源碼的層次架構
評論