最近有位問:剛參加工作,看不懂代碼?
這篇文章我們就來簡單分享一些看代碼的經(jīng)驗(yàn)。
1、了解項(xiàng)目整體架構(gòu)
在閱讀嵌入式代碼之前,我們需要對項(xiàng)目整體架構(gòu)有一個基本的了解。
公司里的項(xiàng)目,一般在做項(xiàng)目之前,都會進(jìn)行系統(tǒng)設(shè)計(jì)、編寫一些文檔、畫一些系統(tǒng)框圖。可以先找這些項(xiàng)目資料看一看。雖然我們后面可能只是負(fù)責(zé)某個模塊,但是還是很有必要先了解這個項(xiàng)目的總體框架。了解清楚整個項(xiàng)目有有哪些硬件模塊、哪些軟件模塊、有哪些組件、各個模塊之間的輸入輸出、各個模塊是如何協(xié)同工作、項(xiàng)目的主體業(yè)務(wù)是什么、主要功能有哪些等。
嵌入式代碼通常可以分解為幾個關(guān)鍵模塊,例如任務(wù)管理、內(nèi)存管理、通信協(xié)議等。將各個模塊分離出來,逐一閱讀和理解,可以更加清晰地掌握代碼的核心思想。
對項(xiàng)目整體架構(gòu)有一定了解之后,有助于我們更好地理解代碼中的邏輯。
2、熟悉通信部分代碼
項(xiàng)目里一般會劃分多個硬件/軟件模塊,這些模塊之間會進(jìn)行數(shù)據(jù)交互。
梳理清楚:
- 使用了哪些硬件通信接口?例如I2C、SPI、UART等。
- 線程通信?
- 進(jìn)程間通信?
- 網(wǎng)絡(luò)通信?
- 協(xié)議數(shù)據(jù)處理?
- 各個模塊的數(shù)據(jù)分類?
我們可以首先熟悉通信部分代碼,梳理清楚各模塊的交互。這一部分代碼一般是比較容易看懂的,基本是看懂了一條數(shù)據(jù)之后,類似的基本就看懂了。基本看懂之后,可以跟著數(shù)據(jù)的流向,看看拿到這些數(shù)據(jù)之后,去做了什么處理。
因?yàn)槟阒蟮墓ぷ鳎锌赡苁菍戇@一部分代碼。比如增加某個數(shù)據(jù),要實(shí)現(xiàn)什么功能。
拿數(shù)據(jù) + 做邏輯
3、閱讀主業(yè)務(wù)模塊
業(yè)務(wù)邏輯模塊直接跟產(chǎn)品功能掛鉤,看懂這個模塊就可以很好地了解我們產(chǎn)品的功能。
業(yè)務(wù)邏輯作為最上層的模塊,可能有好幾個模塊都對其提供一些接口。
閱讀這一塊代碼需要注意的是:
每個功能具體的函數(shù)實(shí)現(xiàn)可能會嵌套好多層的代碼,剛開始千萬不要一層一層點(diǎn)進(jìn)去閱讀、不要試圖看懂每個函數(shù)、每行代碼,不然只會越看越懵。
我們在閱讀這個模塊的代碼時,盡量沿著這個模塊的主線去閱讀,沿著主線盡可能快地弄清這個模塊做的事情,理解函數(shù)調(diào)用關(guān)系。等我們弄懂本模塊之后,日后對其它模塊感興趣再去仔細(xì)閱讀其具體實(shí)現(xiàn)也不遲。
4、了解單元測試測試用例
一般項(xiàng)目里模塊開發(fā)完成會編寫一些單元測試用例進(jìn)行自測。我們可以先不看單元測試模塊是如何實(shí)現(xiàn)的,可以先看一些各個模塊的測試用例,每個用例是如何跑的?輸入?輸出?
通過閱讀這些測試用例,可以幫助我們快速地理解各個模塊是如何觸發(fā)的,以及一些接口的使用方法。
5、實(shí)踐、分析日志
對代碼有了一定理解之后,肯定也會帶有很多困惑,這時候可以自己修改代碼/增加一些調(diào)試日志來幫我們理解代碼,有在線調(diào)試條件的可以進(jìn)行在線調(diào)試。
同時,我們需要大致熟悉項(xiàng)目整體的日志:
熟悉日志的格式。帶有時間戳?帶有模塊標(biāo)簽?日志等級?
了解應(yīng)用程序啟動日志,通過日志了解啟動做了哪些工作、經(jīng)過了哪些流程。
了解一些關(guān)鍵日志。主業(yè)務(wù)的日志?
跑跑一些用例,看看對應(yīng)的日志。
以上就是我們關(guān)于閱讀嵌入式代碼的一些分享。
如果文章對你有幫助,麻煩幫忙轉(zhuǎn)發(fā)。
本文轉(zhuǎn)載自公眾號|嵌入式大雜燴
作者 | 嵌入式大雜燴
-
代碼
+關(guān)注
關(guān)注
30文章
4751瀏覽量
68359 -
嵌入式代碼
+關(guān)注
關(guān)注
0文章
5瀏覽量
5889
發(fā)布評論請先 登錄
相關(guān)推薦
評論