嵌入式底層軟體開發學習系列之六軟體工程

2021-07-07 08:48:56 字數 2418 閱讀 8074

本節按照專案的週期來分析: 需求與立項,軟體硬體設計,編碼實現與除錯,量產前測試,小規模量產測試, 大規模量產測試,  後期維護;等過程中軟體部分的工作點。重點將體現與純軟體開發的差異

(1) 需求與立項

與企業應用等軟體開發比較起來, 嵌入式底層開發的需求相對較簡單, 主要是搞清最終晶元產品要支援哪些協議,裝置的效能(工作效率和使用電量)需求:

a. 分析產品的用途,適用範圍和功能. 若市場上已有同類產品, 要分析自身的優勢(成本,效能,相容性,擴充套件性)在哪

b. 根據效能目標與造價成本,確定系統選用何種cpu, 計算量較大的專案還需要考慮協處理器的選擇或自行設計。軟體要考慮是否使用作業系統, 作業系統了類別與size.

c. 與上位機通訊採用何種介面。 如採用pcie/sata,/usb/ii2c/spi等等, 確定需要使用一種或多種介面; 選定通訊協議後還要考慮基於這些協議的應用層的協議。

d 內部功能的實現, 要考慮ram, rom的大小, 以及外部儲存模組 。 主功能採用哪些第三方晶元或ip來開發, 哪些硬體功能模組需自行開發與設計。同時也要考慮哪些軟體功能能復用已有專案,或開源專案, 其占用儲存空間與執行效率。

e. 成本與功能可行性分析, 對於新的開發領域需詳細閱讀與學習各種相關規範, 甚至需要開發人員進行**級的預研。 主要考慮目標效能與功能否達到,且最終產品成本與開發成本能否符合預期。若效能與成本都不及市場上已有產品,則專案基本不可行。

(2) 軟體硬體設計

a. 設計整個軟體的架構, 決定好作業系統, 第三發軟體, 和要重用的模組。

b. 對於需要新設計的硬體功能, 需要與硬體工程師一同確定哪些功能由硬體設計, 哪些由軟體設計。 硬體的優勢在於效能好, 而軟體的優勢在於成本較低且擴充套件性好。 與硬體工程師共同編寫硬體控制的spec或datasheet

c. 對於採用第三方晶元的模組,需要閱讀規範。並檢視已有的**或示例**的實現程度。 根據這些資料設計**的修改或優化點, 並編寫相應設計文件。

d. 設計需要全新實現的軟體模組。

與純軟體開發的不同在於: 要劃分軟硬體功能,設計軟硬體介面規範。 另一點就是要考慮軟體設計方案的硬體資源佔用率與量。盡可能的採用硬體需求低的方案, 比如需要乙個128kb的e2prom ,那麼就要思考能否採用64kb的方案呢。假設乙個能省10分錢的成本, 1000萬片就能省100萬。 所以軟體設計中要有較強的成本觀念。 

無論是採用結構化設計方法還是物件導向設計方法, 不要忽視軟體設計的本質是提高內聚,降低耦合, 提高可維護性與重用性。 但對於效能影響較大的關鍵路徑(嵌入式cpu效能比pc低), 因而要在軟體的重用性,執行效率和軟體占用資源率之間找到乙個平衡。這也是與純軟體開發的乙個不同點。

e. 補丁系統設計。 嵌入式軟硬體都難免出現未發現的bug, 特別是到後期可能出現硬體bug,需要軟體來解決。 所以設計乙個好的補丁方式是必不可少的。特別是對於無法更新整個軟體(韌體)的嵌入式系統。補丁系統還要考慮到能對不同客戶,擴充套件一定的功能。

f. 設計測試與驗證方法, 並編寫測試用例文件。

(3) 編碼實現與除錯

對於軟硬體同時開發的模組, 需要聯合硬體工程進行除錯;某些功能需要在模擬器/**器上除錯

(4) 量產前測試

由於還沒有最終產品, 一般是在開發板或fpga板上進行測試。 需要分析與最終平台的區別, 分析哪些功能未能驗證到, 

需要對這部分**進行其它測試來彌補。 下面是彌補方法:

(1) 用軟體模擬實現乙個底層的樁模組, 來測試上層待測試模組流程的正確性。

(2)  建立軟體的**模型, 通過**的方法測試對硬體控制是否正確。

(3) 加強對這一部分**的軟體審查

另外, 對於無法更新整個軟體(韌體)的嵌入式系統; 補丁功能的測試是重中之重。 

最後一點是, 盡可能的加強測試的自動化實現(如測試到各種配置硬體引數); 對於一些不能完全自動測試的地方(如需要人通過第三方工具來測量的部分), 也可以設計具有提示功能的半自動測試軟體。 這樣可以提高測試效率。 

(5) 小規模量產(或試生產)測試

小規模量產後需要再次完整測試軟硬體, 不能因為之前測過了就不再測試(或掉以輕心), 因為這時硬體平台發生了一定的變化, 任何改變可能帶來硬體功能的變化。

另外還需測試上一階段無法測試的極端條件測試, 如高(低)溫, 高(低)電壓, 靜電,電磁干擾等測試項。 

(7)大規模量產測試

這時如果出現問題, 硬體晶元級的修改已經不可能了, 只能通過板級的,或軟體層的修改(要靠補丁系統)來解決問題了。某些硬體問題也需要軟體來fix

(6) 後期維護

與 大規模量產測試後發現問題的處理方式基本相同。

該過程中軟體**(文件)的版本控制, bugs追蹤管理, 專案追蹤管理與普通軟體開發採用的方法與工具並無區別。

嵌入式軟體開發流程

1 嵌入式軟體開發流程在整個流程中,使用者首先需要建立工程並對工程做初步的配置,包括配置處理器和配置除錯裝置。編輯工程檔案,包括自己編寫的彙編和c語言源程式,還有工程編 譯時需要編寫的鏈結指令碼檔案,除錯過程中需要編寫儲存區映像檔案和命令指令碼檔案,以及上電復位時的程式執行入口的啟動程式檔案。對後四...

嵌入式軟體開發之我見

自己從事嵌入式系統開發有好多年了,在此想與大家分享我對於嵌入式開發的一點心得與體會。先大致說一說我的工作經歷。97年畢業後做了兩年的電氣與電子設計與開發,這一時期,我做過電路原理圖的設計和pcb板的設計。從99年開始,我進入了軟體行業。第一次做嵌入式開發是在2000年,在隨後的六年多的時間裡,我差不...

凹凸電子 嵌入式軟體開發

embedded software design engineer 1 讀程式段,回答問題 int main int argc,char argv a 寫出程式輸出 b 在乙個可移植的系統中這種表示式是否存在風險?why?include stdio.h int a 0 int b static ch...