引言
閱讀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語言
+關注
關注
180文章
7604瀏覽量
136841 -
AUTOSAR
+關注
關注
10文章
362瀏覽量
21588 -
驅動模塊
+關注
關注
0文章
62瀏覽量
14141 -
MCU控制
+關注
關注
0文章
48瀏覽量
6737 -
BSW
+關注
關注
0文章
15瀏覽量
3512
發布評論請先 登錄
相關推薦
評論