引言
閱讀MCAL源碼包中的源碼,猜測(cè)MCAL可能只是MCU底層SDK向AutoSAR的一個(gè)適配接口。為了驗(yàn)證這個(gè)猜測(cè),比較直接的做法,就是通過(guò)源碼“逆向”出軟件包中函數(shù)的調(diào)用關(guān)系,試圖歸納出實(shí)際的源碼設(shè)計(jì)層次架構(gòu)。
為此,我想到多年前在CI服務(wù)器上生成SDK API手冊(cè)時(shí),偶然發(fā)現(xiàn)的可以使用doxygen工具生成函數(shù)調(diào)用關(guān)系圖的方法,打算摩拳擦掌,“搞”它一下子。
準(zhǔn)備和安裝軟件
doxygen 是跨平臺(tái)的工具,支持Linux、Windows、Mac OS X系統(tǒng)(本文將以Windows版本為例)。支持C語(yǔ)言在內(nèi)的多種語(yǔ)言的分析,生成的幫助文檔格式可以是CHM、RTF、PostScript、PDF、HTML和Unixman page等。
它是一款優(yōu)秀的文檔自動(dòng)生成工具,可以將代碼中的注釋轉(zhuǎn)換成幫助文檔(注釋格式要符合 doxygen 要求才行,F(xiàn)Fmpeg API Documentation 就是用doxygen自動(dòng)生成的)。
本文使用doxygen的主要目的是生成函數(shù)調(diào)用關(guān)系圖,也可以通過(guò)靜態(tài)分析代碼,生成「頭文件引用關(guān)系圖」、「函數(shù)調(diào)用關(guān)系圖」、「繼承圖」以及「協(xié)作圖」來(lái)可視化文檔之間的關(guān)系。
生成Call Graph
運(yùn)行 doxywizard.exe。
配置Wizard > Project
頁(yè)面
配置doxygen工程的目錄、即將掃描源碼的目錄、產(chǎn)生輸出文件的目錄等。
配置Wizard > Mode
頁(yè)面
選定目標(biāo)源碼的編程語(yǔ)言,為C語(yǔ)言。
配置Expert > Project
頁(yè)面
可以選擇生成中文文檔。
配置Expert > Build
頁(yè)面
配置引用的對(duì)象類(lèi)型。
配置Expert > Dot
頁(yè)面
啟用DOT,啟用生成CALL_GRAPH,配置生成DOT的工具路徑。
分析并生成源碼
查看生成內(nèi)容
查看生成的調(diào)用流圖
以查看Mcu.c
文件的包含關(guān)系為例:
以查看Mcu_ClockInit()
函數(shù)的調(diào)用關(guān)系為例:
查看MCU驅(qū)動(dòng)模塊與其他模塊的關(guān)聯(lián)關(guān)系:
總結(jié)
在doxygen生成的網(wǎng)站中大略過(guò)了一遍YTM32 MCAL的調(diào)用關(guān)系流圖,以MCU驅(qū)動(dòng)模塊為例,做了簡(jiǎn)要的架構(gòu)分析。MCU驅(qū)動(dòng)模塊的實(shí)現(xiàn)源碼主要位于Mcu
目錄中(另有Mcu_Cfg.h
文件位于board
目錄中),MCU驅(qū)動(dòng)模塊還引用了Rte
和Det
目錄中的組件,以及Platform
中關(guān)于硬件硬件的訪問(wèn)。
根據(jù)AutoSAR MCAL的規(guī)范,Mcu
和Det
、Rte
等組件位于同一層次,并存在相互調(diào)用的關(guān)系。MCU驅(qū)動(dòng)模塊為了區(qū)分MCAL的同層調(diào)用關(guān)系和面向硬件的調(diào)用關(guān)系,專(zhuān)門(mén)在Mcu.c
文件和Mcu_Lld.c
文件中分兩層實(shí)現(xiàn)了MCU驅(qū)動(dòng)模塊的功能:
在Mcu.c
文件中,可以調(diào)用MCAL同層次組件的服務(wù),向AutoSAR的BSW提供底層服務(wù)。向下通過(guò)調(diào)用Mcu_Lld.c
文件中函數(shù),實(shí)現(xiàn)對(duì)本組件專(zhuān)屬硬件的訪問(wèn)。
在Mcu_Lld.c
文件中,不能調(diào)用MCAL層次上的服務(wù),僅能訪問(wèn)MCU硬件資源,并僅能又Mcu.c
文件中的函數(shù)調(diào)用。
類(lèi)似地,其他的MCAL層的驅(qū)動(dòng)模塊也是如此分層地設(shè)計(jì)和實(shí)現(xiàn)。
如此,可以推斷,本文分析的YTM32B1ME05
的MCAL軟件包為代表,若在YTM32B1MD14
芯片(或其他車(chē)規(guī)MCU)的MCAL軟件包中,在基于這個(gè)層次架構(gòu)實(shí)現(xiàn)MCAL軟件包中,需要適配的,也僅僅是Mcu_Lld.c
文件這個(gè)層級(jí)上的源碼。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136839 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
362瀏覽量
21588 -
驅(qū)動(dòng)模塊
+關(guān)注
關(guān)注
0文章
62瀏覽量
14141 -
MCU控制
+關(guān)注
關(guān)注
0文章
48瀏覽量
6737 -
BSW
+關(guān)注
關(guān)注
0文章
15瀏覽量
3512
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論