硬體工程師必學的10種軟體小撇步

作者 : Jacob Beningo,嵌入式系統設計講師兼顧問

嵌入式系統設計不僅需要瞭解硬體,還必須掌握軟體如何影響硬體及其如何互動。當從硬體設計轉向包含軟體的設計時,硬體工程師必須學會十種軟體開發的小撇步...

嵌入式系統設計通常不僅需要瞭解硬體,還必須掌握軟體如何影響硬體及其間如何相互作用。設計硬體所需的特定工程典範可能與設計軟體完全相反。當從硬體設計轉向包含軟體的設計時,硬體工程師應思考以下十個軟體開發小技巧。

 

 

技巧#1:流程圖優先,實作次之

當工程師首次邁入軟體開發領域時,會有一種強烈的誘惑力使其立刻投入工作並開始編寫程式碼。這種做法就好像在電路原理圖尚未完成前就試圖設計印刷電路板(PCB)。在著手開發軟體時,抑制一上來就想寫程式碼的衝動至關重要,更重要的應該是先用流程圖制定一個軟體架構圖。這樣的方法將會讓開發人員對於應用所需的不同部份與元件形成一個概念,就像電路原理圖可以告訴工程師需要哪些硬體元件一樣。這樣可以確保程式整體建立在良好的組織和深思熟慮之上,以減少除錯時間,從長期來看,這樣做還可以節省時間與麻煩。

技巧#2:使用狀態機控制程式設計流程

狀態機(state machine)是20世紀最重要的軟體發明之一。一項應用往往可以被分為多個狀態機,其中每個都控制該應用的特定組成。這些狀態機都擁有自己的內部狀態和狀態轉換,從中可看出軟體如何與各種激勵相互作用。利用狀態機來設計軟體,可簡化軟體的開發,使之模組化、可維護且易於理解。現在已經有多種資源可用於展示狀態機理論和演算法。

技巧#3:避免使用全域變數

在函數編程的年代,函數要先於形式,程式設計師的唯一目標是盡可能地讓程式按預期方式快速運行,而無需考慮程式結構或再使用性。這種程式設計範式會毫無顧慮地使用全域變數,程式中的任何函數都可能修改它。其結果就造成了變數被破壞的機率增加或變數被誤用。在新推薦的物件導向範式中,應在最小的範圍內定義變數並加以封裝,以防止其他函數的誤用或破壞。因此,建議限制使用全域變數的數量。在C語言中可用外部關鍵字標識這些變數。

技巧#4:充份利用模組化特性

無論問哪一位工程師,專案的哪個部份最可能延遲交付並超出預算,答案都是軟體。軟體往往極其複雜,而且難以開發和維護,尤其是當整個應用都存在於單一檔案或多個鬆散關聯的檔案時。為了改善可維護性、再使用性及複雜性,強烈建議程式設計者充份利用現代程式設計語言的模組化特性,將常用功能分解成模組。以這樣的方式分解程式碼,程式設計人員就能著手建立函數庫與特性庫,然後在一個接一個的應用中重複使用,從而透過連續測試而改善程式碼品質,同時減少開發時間,並降低成本。

技巧#5:保持中斷處理程式的簡單性

中斷服務常式(Interrupt Service Routine;ISR)用於中斷處理器對當前程式碼的執行,以便處理剛剛觸發中斷的週邊設備。無論何時執行中斷,都需要一定的開銷,用於保存當前程式的狀態並執行中斷,然後將處理器回歸原程式狀態。現代處理器要比多年前的處理器快得多,但仍需要考慮其開銷。一般情況下,程式設計人員都想把中斷執行時間降至最低,以避免干擾主程式碼。這意味著中斷應該短而簡單,而且不應調用函數。此外,如果中斷變得過於複雜或耗時,那麼就應該只在必要時利用中斷做最少量的工作,例如,將資料載入緩衝區並設置一個標誌,然後讓主程式碼處理輸入的資料。這樣做可確保大多數處理器的時間用於執行,而不是處理中斷。

技巧#6:使用處理器示例程式碼進行測試

當設計硬體時,建構原型測試電路極其有利,如此可確保工程師對電路有正確的理解,然後再做電路板佈局。這在設計軟體時也同樣適用。晶片製造商通常都有程式碼示例,可用來測試微處理器的各個部份,這樣工程師們就可以判定該部份的工作情況。此方法有助於明確地知道如何設計軟體體系架構,以及可能碰到的任何問題。在設計初期瞭解可能存在的障礙,比在產品交付前的最後幾小時才發現問題更重要。這是預先測試一段程式碼的好方法,但值得注意的是,製造商的程式碼往往不是模組化的,必須經過徹底的修改才可用於實際應用。隨著技術的進步,也許某一天晶片供應商可提供生產就緒的程式碼。

…繼續閱讀請連結EDN Taiwan網站

 

 

 

 

 

加入我們官方帳號LINE@,最新消息一手掌握!

發表評論