作為嵌入式軟件工程師,很容易認為產(chǎn)品的所有軟件都依賴于硬件。大多數(shù)嵌入式開發(fā)人員都希望立即獲得開發(fā)板并開始編寫軟件,這不一定是錯的,它只是熟悉,讓我們了解與硬件相關的復雜性和問題。但事實是,如果我們正確設計了應用程序代碼,我們可以在沒有底層硬件的情況下模擬和測試大部分應用程序代碼。,模擬和調試脫靶硬件更加高效和經(jīng)濟。
在今天的文章中,我們將探討成功模擬嵌入式軟件的三個技巧。
模擬嵌入式軟件技巧 #1 – 專注于業(yè)務邏輯
嵌入式開發(fā)人員需要認識到,他們產(chǎn)品的業(yè)務邏輯,即區(qū)分他們產(chǎn)品的秘訣,可以編寫成獨立于硬件。無需目標硬件即可在 PC
環(huán)境中模擬和測試與硬件無關的代碼。
開發(fā)人員不需要為他們的目標交叉編譯業(yè)務邏輯,而是可以使用 GCC 或 g++
編譯它。然后可以使用模擬輸入和輸出在計算機上執(zhí)行該應用程序。仿真有助于顯著加快開發(fā)速度,并在硬件團隊交付原型板之前證明這一點。
我通常發(fā)現(xiàn)這對于直接訪問 Linux 風格終端的 Linux 和 Mac 開發(fā)人員來說更容易。 Windows
開發(fā)人員可能會發(fā)現(xiàn)他們需要安裝 Cygwin 或 Mingw,這兩者的設置都很簡單。然而,有傳言說新版本的 Windows 將很快,或者可能已經(jīng)發(fā)布,帶有基于
Linux 的終端。
模擬嵌入式軟件技巧 #2 – 明智地構建軟件
前面我提到過設計合理的軟件可以在 PC 上進行模擬或測試。
“設計合理”的軟件是一種軟件,其架構旨在最大限度地減少依賴關系,并設計為具有獨立組件的靈活性。仔細的軟件架構開發(fā)允許在集成到產(chǎn)品之前單獨測試組件和模塊。事實上,在
PC 上執(zhí)行大部分業(yè)務邏輯測試對我來說并不少見。 PC 環(huán)境使我們能夠快速測試輸入、輸出、繪圖數(shù)據(jù),并測試難以達到目標的極端情況。
通常情況下,嵌入式開發(fā)人員會在硬件上玩轉軟件數(shù)周,試圖找出可能導致問題的原因。
在這種情況下,團隊正在賭博,希望在任何合理的時間內找到解決方案。 由于軟件的設計和實現(xiàn)方式,我能夠提取算法,人們認為它依賴于硬件,然后將其包裝在我在 PC
上執(zhí)行的測試代碼中。 然后我能夠繪制輸出并將其與預期結果進行比較。 這允許開發(fā)人員在受控和隔離的環(huán)境中對部分軟件執(zhí)行完整性檢查。
如果匹配,則算法集成到嵌入式處理器的方式存在問題。 如果不匹配,那么目標實現(xiàn)可能需要一些調整。
模擬嵌入式軟件技巧 #3 – 利用 Matlab 等工具
Matlab 可以讓團隊模擬狀態(tài)機、算法并深入研究系統(tǒng)的行為方式。事實上,在許多汽車和航空航天應用中,團隊甚至會讓
Matlab 為他們生成嵌入式代碼,然后團隊只需要維護他們的模型!將嵌入式代碼仿真與 Matlab
輸出進行比較,然后提供詳細信息以顯示算法或嵌入式系統(tǒng)中是否存在問題。
模擬還可以幫助嵌入式開發(fā)人員了解整個系統(tǒng)。有時我們盲目地實現(xiàn)算法,卻沒有真正了解它們的工作原理、輸入的真正含義以及這些輸入的輸出應該是什么樣子。有時我們可以僥幸逃脫,但如果出現(xiàn)問題,開發(fā)人員了解細節(jié)通常至關重要。模擬可以幫助解決這個問題,特別是如果包括所有旋鈕和刻度盤。開發(fā)人員可以增加參數(shù)
A 并查看它如何更改輸出。然后可以調整參數(shù) B
等等,直到他們完全理解系統(tǒng)是如何工作的。在很多情況下,問題的關鍵不是算法,而是它與實時行為的交互。
嵌入式軟件開發(fā)人員不必依賴硬件即可完成工作。當然,當硬件可用時,它是很棒的,它可以讓開發(fā)人員通過硬件的障礙。
不過,歸根結底,可以模擬和測試許多算法和應用程序特性。
事實上,這種模擬可以幫助證明系統(tǒng)正在以應有的方式工作,或者幫助解決可能需要相當長的調試時間的細微差別。嵌入式開發(fā)人員需要在他們的技巧包中添加off-target模擬,如果他們還沒有這樣做的話。