最近幾天在完成一個(gè)項(xiàng)目的EVT收尾工作,EVT這個(gè)名詞可能有些朋友不是很熟悉,EVT(Engineering Verification Test)表示進(jìn)行工程驗(yàn)證測(cè)試階段。
一般的新產(chǎn)品開(kāi)發(fā)都分為三個(gè)階段 : EVT、DVT和PVT,EVT主要是調(diào)試單板,設(shè)計(jì)方案的可行性驗(yàn)證,所以這個(gè)階段非常的關(guān)鍵,而后面幾個(gè)階段在流程比較成熟的公司,一般都是順理成章的事。
這次給我感受頗深的是代碼的可移植性和可復(fù)用性,所以給大家分享一下。
代碼的價(jià)值
其實(shí)軟件都是朝著,高內(nèi)聚、低耦合、良好的可移植性以及較強(qiáng)的可復(fù)用性來(lái)不斷發(fā)展的,其中高內(nèi)聚和低耦合就不多說(shuō)了,這兩點(diǎn)跟項(xiàng)目的軟件功能結(jié)構(gòu)劃分存在較大的聯(lián)系,而可移植性和可復(fù)用性就相對(duì)比較通用和獨(dú)立。
可移植性與我們平時(shí)所說(shuō)的跨平臺(tái)能力比較相近,而軟件復(fù)用則是一種通過(guò)已有軟件子件來(lái)構(gòu)建新產(chǎn)品軟件的能力。
這些代碼屬性都將成為評(píng)估代碼價(jià)值的指標(biāo),很多朋友該說(shuō)了,嵌入式中的代碼不就是在滿足客戶需求的前提下穩(wěn)定運(yùn)行嗎?bug不要太多就好。
沒(méi)錯(cuò),但這屬于代碼最基本的價(jià)值,也是被稱為代碼本該有的價(jià)值,否則那不叫代碼,叫"隨隨便便默寫(xiě)的abc"。
要想成為一名優(yōu)秀的程序員,滿足基本的代碼價(jià)值還遠(yuǎn)遠(yuǎn)不夠,還要有能力創(chuàng)造代碼的其他價(jià)值,讓代碼的生命力延續(xù)得更久,其中可移植性和可復(fù)用性是衡量的重要指標(biāo)。
可移植與可復(fù)用
開(kāi)發(fā)一套軟件,猶如生產(chǎn)一套工具,大部分情況下都不提倡一次性工具,你所開(kāi)發(fā)的東西不僅能夠滿足當(dāng)前需求,還需要為以后相似的開(kāi)發(fā)或者應(yīng)用以及產(chǎn)品的更新?lián)Q代提供支持。
比如拿構(gòu)建的濾波算法庫(kù),每次用到新的濾波算法都不會(huì)與實(shí)際的項(xiàng)目耦合,而是單獨(dú)分離出來(lái)與算法庫(kù)融合,并且開(kāi)放出較全的對(duì)外接口。
這樣僅僅只是考慮了軟件的可復(fù)用能力,還要考慮該庫(kù)的跨平臺(tái)能力,比如把與平臺(tái)相關(guān)的部分抽出來(lái)進(jìn)行各平臺(tái)的兼容等處理來(lái)加強(qiáng)各部分的可移植性。
其實(shí)很多時(shí)候有些人把軟件的可復(fù)用更多的看成是一種縱向的可移植能力。
這樣當(dāng)我們進(jìn)行下一個(gè)項(xiàng)目軟件開(kāi)發(fā)的時(shí)候,前期就可以直接把該庫(kù)移植過(guò)去,后面就不需要再“重復(fù)造輪子”了。
一方面縮短了嵌入式軟件的開(kāi)發(fā)周期,另一方面相應(yīng)的代碼也會(huì)更加的穩(wěn)定,從而提高了產(chǎn)品交付能力。
嵌入式更需要
在嵌入式軟件開(kāi)發(fā)中,代碼的可移植和可復(fù)用能力相對(duì)而言會(huì)有更多的訴求。嵌入式就是用有限的資源來(lái)構(gòu)建特定的應(yīng)用場(chǎng)景,這句話里面有兩個(gè)詞"有限"和“特定”,我覺(jué)得這不僅把嵌入式描述清楚了,而且把嵌入式與其他領(lǐng)域的區(qū)別道出來(lái)了。
很多做嵌入式的朋友玩了一段時(shí)間更上層的應(yīng)用開(kāi)發(fā),就會(huì)覺(jué)得上層開(kāi)發(fā)是那么的輕松,確實(shí)那很輕松,因?yàn)槟切┧鶐?lái)的便利都是建立在過(guò)盛的硬件資源條件下完成的,然而嵌入式與此并不協(xié)調(diào)。
有過(guò)較長(zhǎng)時(shí)間嵌入式軟件開(kāi)發(fā)的朋友,應(yīng)該有一個(gè)感受--"嵌入式太雜了",首先還不說(shuō)各種應(yīng)用的場(chǎng)景,單單嵌入式平臺(tái)的底層驅(qū)動(dòng)就非常的繁雜,平臺(tái)種類繁多,同一平臺(tái)下不同系列外設(shè)也會(huì)存在差異等等,甚至這些繁多的軟件版本管控都是一個(gè)大學(xué)問(wèn)。
剛開(kāi)始學(xué)單片機(jī)的朋友,在起初都會(huì)有這樣的挫敗感,”又換MCU了呀?感覺(jué)又要重頭開(kāi)始學(xué)了?有開(kāi)發(fā)板嗎?有參考demo嗎?“等等。
其實(shí)真正參加工作以后,幾年下來(lái)接觸到好幾款芯片應(yīng)該不是什么新鮮事了,甚至那些芯片都非常的冷門(mén),所以在各平臺(tái)上都游刃有余是一種重要能力的體現(xiàn)。
隨著芯片工藝和技術(shù)的提升,MCU各方面的性能和功能都有加強(qiáng),底層驅(qū)動(dòng)部分的開(kāi)發(fā)也是越來(lái)越復(fù)雜,datasheet更是需要經(jīng)常查閱,因?yàn)楹芏鄷r(shí)候廠家的例程無(wú)法滿足目前的使用需求。
然而各大廠家都有自己的一套外設(shè)驅(qū)動(dòng)流程和配套開(kāi)發(fā)風(fēng)格,沒(méi)有得到統(tǒng)一,如果經(jīng)常使用同一家廠家的產(chǎn)品,影響相對(duì)小一點(diǎn)。
比如st庫(kù)就為大家做了這一塊的工作,只要是使用st系列的MCU很多驅(qū)動(dòng)都是通用的,但是也免不了標(biāo)準(zhǔn)庫(kù)的停更和hal庫(kù)與llc庫(kù)的誕生,為了適應(yīng)新鮮的東西,都需要花時(shí)間去測(cè)試、評(píng)估和修改。
所以對(duì)于底層驅(qū)動(dòng)開(kāi)發(fā)的復(fù)雜度,目前來(lái)看并沒(méi)有很好的辦法,如果驅(qū)動(dòng)部分與應(yīng)用部分再雜糅在一起,這樣的代碼就大大降低了我們今天談的這兩大屬性。
所以驅(qū)動(dòng)部分、平臺(tái)相關(guān)的都要與具體應(yīng)用代碼進(jìn)行分離。
構(gòu)建中間層
對(duì)于底層驅(qū)動(dòng)為了達(dá)到分離的目標(biāo),我們需要構(gòu)建中間層,也有人稱之為硬件抽象層,既然在MCU上底層驅(qū)動(dòng)庫(kù)很難得到較好的統(tǒng)一,通過(guò)分層的思想,把驅(qū)動(dòng)和上層進(jìn)行分離,通過(guò)構(gòu)建一個(gè)中間層,中間層就相當(dāng)于一個(gè)萬(wàn)能轉(zhuǎn)換器,提供給上層的將是一套統(tǒng)一的接口,而內(nèi)部通過(guò)API適配把底層的差異進(jìn)行統(tǒng)一,以達(dá)到屏蔽掉底層的各種差異性的目的。
說(shuō)起來(lái)好像挺簡(jiǎn)單的,其實(shí)不然,這套統(tǒng)一的接口是需要定義者對(duì)多個(gè)平臺(tái)非常的熟悉,建立之前豐富的軟件設(shè)計(jì)經(jīng)驗(yàn)之上,并不簡(jiǎn)單的傳遞幾個(gè)參數(shù),封裝成一個(gè)函數(shù)就完事了,往往如果接口統(tǒng)一不好,不僅僅達(dá)到到較好的可移植目的,甚至反而降低了處理的效率。
最后
在可移植性方面,對(duì)代碼進(jìn)行平臺(tái)驅(qū)動(dòng)的適配,以及平臺(tái)屬性方面的適配(比如數(shù)據(jù)類型的平臺(tái)差異等),就可以滿足系統(tǒng)的運(yùn)作。
面對(duì)目前缺芯的境況,代碼的可移植性的價(jià)值就體現(xiàn)出來(lái)了,可移植性好的改動(dòng)也非常小。
而對(duì)于可復(fù)用能力,體現(xiàn)在新產(chǎn)品軟件的快速構(gòu)建能力了,代碼的可復(fù)用能力越高,公司培養(yǎng)的CV工程師就越多,可復(fù)用性是一個(gè)解放程序員的代碼屬性。
為什么有些人越來(lái)越強(qiáng),開(kāi)發(fā)速度越來(lái)越快,很大程度上是因?yàn)樗麄兯e累的軟件子類具有較強(qiáng)的可移植性和可復(fù)用能力。
當(dāng)你要進(jìn)行一個(gè)新項(xiàng)目開(kāi)發(fā)中,只需要把這些可復(fù)用的軟件以模塊的方式進(jìn)行拼湊和協(xié)調(diào)即可實(shí)現(xiàn)一個(gè)你想要的工程,就跟我們建房子也是類似的道理。
中間件以上的軟件部分,盡量不要使用編譯器或者平臺(tái)的特有屬性,比如特定的關(guān)鍵字、函數(shù)、或者編譯器的擴(kuò)展語(yǔ)法等。
當(dāng)然盡量不要用,并不是說(shuō)你不要去了解和學(xué)習(xí),如果其對(duì)系統(tǒng)性能提升有非常大的幫助,最好是想辦法與實(shí)際的應(yīng)用代碼進(jìn)行分離。
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19675瀏覽量
317603 -
濾波算法
+關(guān)注
關(guān)注
2文章
90瀏覽量
13971 -
DVT
+關(guān)注
關(guān)注
0文章
8瀏覽量
8651 -
MCU芯片
+關(guān)注
關(guān)注
3文章
256瀏覽量
12113
原文標(biāo)題:嵌入式的可移植性和可復(fù)用性
文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何應(yīng)用設(shè)計(jì)模式的思想寫(xiě)出更優(yōu)質(zhì)的嵌入式軟件應(yīng)用程序代碼

評(píng)論