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

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

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

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

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

分析并生成源碼

查看生成內容

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

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

查看MCU驅動模塊與其他模塊的關聯關系:

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