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