題:
編寫不帶硬件的嵌入式軟件
anishkumar
2016-02-07 20:54:08 UTC
view on stackexchange narkive permalink

考慮到硬件團隊需要花兩個月的時間來開發一些硬件,但是到那時我將需要準備好軟件。

我的問題是我該如何編寫軟件並對其進行測試沒有硬件?

是否要遵循任何標準?你如何做到的?

根據硬件的複雜程度,您可以嘗試使用模擬器。如果它只是具有簡單外圍設備的微控制器,那是完全可行的。不僅如此,您在那條路線上還不走運。
嘗試找到適用於您使用的微型設備和任何其他外圍設備的開發板,並嘗試以最類似於您的硬件團隊設計的方式將它們全部連接起來。這將是一個大而醜陋的過程,但是您應該能夠構建一個與真實事物足夠接近的系統-至少在固件可以識別的範圍內...
最糟糕的是,如果您不能正確地模擬硬件,則可以禁用它。就在幾週前,我想測試與另一個程序的網絡通信,但發現它會`exit()`,因為它試圖映射/ dev / mem中的硬編碼地址。
實際上,在許多情況下,使用模擬器進行嵌入式軟件開發實際上是可取的-調試起來容易得多。當然,問題在於您需要一個不錯的模擬器。有時候會有一個通用的人可以適應,有時候一個聰明的實習生可以用咖啡因推動的編碼狂潮來寫一個。
六 答案:
Olin Lathrop
2016-02-07 21:19:08 UTC
view on stackexchange narkive permalink

在固件開發的初始階段發生硬件故障。解決此問題的常見策略是:

  1. 在編寫任何代碼之前,請花點時間仔細設計系統。當然,您仍然應該這樣做,但是在這種情況下,它比平時更重要。與基於麵食的混亂相比,調試經過深思熟慮的軟件要容易得多。

  2. 適當地模塊化所有內容,最大程度地減少模塊之間的接口。這將有助於包含各個模塊的錯誤,並使單個模塊的測試更加容易。這樣可以儘早發現架構帶來的不便。不要害怕隨著硬件現實的​​變化而改變體系結構,但是要確保所有文檔都進行了相應的更新。

  3. 模擬。大多數微控制器公司都提供其微控制器的軟件模擬器。這些只能走得很遠,但仍然非常有用。模擬硬件的輸入和測量輸出可能很困難,但是以這種方式檢查高級邏輯應該不太困難。

    這是模塊化設計再次提供幫助的地方。如果您不能合理地模擬一些低級別的硬件交互,則可以使用該模塊的另一個版本,該版本接觸該硬件,但會將其自己的模擬動作傳遞給更高級別。高層不知道這種情況正在發生。您將不會以這種方式檢查低級模塊,而是以其他所有方式進行檢查。

    ol>

    總之,請使用良好的軟件設計實踐,當然您應該選擇無論如何都要做。

要添加:在ASAP中獲得開發板(是的,多個,因為您可能會殺死至少一個...),並準備好低層驅動程序。盡可能對單元代碼進行單元測試。是的,您可以統一硬件接觸代碼。不,您無法完全模擬硬件,但是即使在第一次刷新之前,也可以正確獲得90%的功能。我在最近的項目中完成了所有上述工作,當真正的硬件出現時,我們已經具備了99%的功能並可以正常工作。這非常了不起。
Techydude
2016-02-07 21:06:05 UTC
view on stackexchange narkive permalink

在沒有對您正在開發的東西或您的硬件最終將基於哪個微控制器家族的任何見識的情況下,大多數微控制器家族都有可用的低成本開發系統,這些系統上帶有一套通用外圍設備,這可能允許您至少模擬某些最終目標硬件。

同意我會說得更厲害。在這種情況下,必須與硬件同時完成軟件,我只會使用具有合適開發或評估板的微控制器。
即使您確實了解OP正在開發什麼,大多數微控制器系列*仍然*都提供了模擬器。
我同時使用兩種方法。但是,我還要關注所需的生產線測試設備。您可以與生產工程師和設計硬件一起測試驅動程序,然後將其形成生產測試的一部分。如果幸運的話,他們甚至可以為開發板/原型構建硬件,因此他們也領先於該過程。這完全取決於您如何提出幫助請求...
這是對這個問題的最佳答案,因為在PCB上嘗試之前,我總是有一個開發板來首先對核心功能進行編程。
erebos
2016-02-08 13:51:52 UTC
view on stackexchange narkive permalink

根據應用程序對硬件的依賴性,您可以僅在標準PC(Windows,Linux ...)上開始實施該項目。無論如何,大多數外圍設備訪問都應該抽象化,因此實現一些虛擬功能並不是什麼大不了的事,稍後將替換它們。如果無法模擬某些行為,則至少可以對系統進行建模(API ...),因此,只要硬件準備就緒,實際的實現就會變得更快,更清晰。 p>

當然有很多無法模擬的東西,例如實時行為或複雜的硬件驅動程序。另一方面,可以使用從文件或網絡端口讀取值的線程輕鬆模擬中斷驅動的ADC。

當然,所有這些高度取決於各種因素:

  • 您可以在控制器和PC(例如gcc)上使用相同/相似的工具鏈嗎?
  • 系統對硬件的依賴性如何?
  • 您對PC編程的經驗如何?

我首先要在PC上設計幾乎每個固件模塊。

同樣在這裡。編譯器(內部語言,特殊關鍵字,閉源OS和網絡堆棧與BSD不太兼容)之間的一些差異以及錯誤(與C ++一起)迫使大量使用特定於文件的預先包含的文件和預處理器,但是代碼本身在DSP之間幾乎是相同的和PC。對於PC版本,我可以使用繁重的運行時錯誤檢查(CodeGuard),並且其調試功能無法在嵌入式平台上實現。額外的好處是,對於任何網絡和負載測試,我幾乎沒有多餘的虛擬設備。
有了Raspberry Pi和BeagleBone的可用性,您的開發環境就可以輕鬆地成為您的運行時環境-工具鍊等沒有問題。此外,您可以使用valgrind / helgrind,gdb等。
Ronan Paixão
2016-02-08 04:25:27 UTC
view on stackexchange narkive permalink

嘗試為您的芯片獲取一個模擬器。您應該模擬所有預期的輸入以及一些意外的輸入。盡可能模塊化/抽象並編寫單元測試。如果可以的話,這些測試可以成為您實際代碼的一部分,並且會變成功能(板子自測試)。

如果您無法獲得模擬器,則可以通過HAL(硬件抽象層)。所有驅動程序都支持它。嘗試在某些C函數調用之後抽象所有特定於平台的程序集,並將其也視為驅動程序。其餘部分作為可移植的C / C ++代碼編寫,並為x86創建一個瘦的HAL,並使用所有測試用例在計算機上運行它。

這樣,當您獲得硬件時,只需調試哈爾它越薄,調試起來就越快,並且一切正常。請記住,如果您使用特定於平台的程序集來加快操作速度,請非常想進行位精確測試

如果使用定點DSP,則位精度特別重要。
它可能適用於或可能不適用於特定情況,但總的來說,精確度是有代價的。QEMU最近(2年前)決定實施精確的FPU,它猜測[性能]發生了什麼(http://eltechs.com/wp-content/uploads/2015/06/geobenchmark_raspberrypi2_exagear1.1.png)?
使用FPU時,位準確度不是那麼重要。但是,如果使用定點,則“極其”重要。特別是因為軟件定點在任何地方都需要額外的檢查。
這是不良編碼實踐的結果。人們已經學會了在對浮點數使用“ a == b”比較時採取預防措施,但是他們仍然不加思索地將其與定點數結合使用。
儘管不良的編碼實踐是一個問題,但還有許多其他問題,尤其是在邊緣情況下。很快就會想到**溢出**,以及**精度損失**,舍入**,**飽和度**和**寬度與位移位**。有了所有這些,很容易忽略普通測試用例中的一些精度損失。問題是當您的應用程序遇到的情況較少且錯誤從小數位移到整數位時,如果範圍計算錯誤,則會發生這種情況。只需查看MATLAB的Fixed-Point Designer的功能頁面,就可以一窺其他錯誤。
bluesceada
2016-02-08 20:05:24 UTC
view on stackexchange narkive permalink

您的問題有點廣泛。硬件(HW)可能意味著完全定制ASIC / FPGA開發,彙編程序編程的DSP,或“僅”基於現成的微處理器/微控制器/ SoC等的典型嵌入式系統(當然,SoC可能還包含DSP)

但是對於一個為期2個月的項目,我希望它基於某種微控制器:

對於高銷量的產品,使其成為ASIC並不罕見。

p>

無論如何,您應該強調硬件團隊給您一個原型,您可以在絕對期限之前開始測試您的代碼-正如某些人已經提到的那樣,它可能包括一個通用開發板,但是在我認為,為您提供合適的設備是他們的工作,並且可能還會為測試提供一些必需的/類似的外圍設備。

在某種程度上也可以使用仿真器,但是您仍然可能需要描述一些真實世界您可能會獲得的傳感器/數據。

此外,硬件團隊已經可以完成軟件設計,並且所有高級模塊都可以(並且應該)進行實現和單元測試,而無需實際操作。理想情況下,您還將與硬件團隊一起定義一個API,它們將為您提供最低級別的功能,因此它們在硬件方面所做的任何更改(例如,簡單地重新定義它們使用的端口引腳)都將是不一定對您很重要。

在所有情況下,溝通都是關鍵。

Photon001
2016-02-07 21:29:49 UTC
view on stackexchange narkive permalink

是的,您可以在目標板生產之前為目標板開發代碼。

如何?

首先,您必須了解該系統的主要目標。因此,您可以從數字資源,鼠標等廣泛的可用資源中適當選擇控制器。

然後選擇Proteus之類的模擬器。現在您可以開始編碼,它將模擬確切的處理器/控制器。但是您不能期望像硬件那樣的準確性。

為什麼要投票?我可以知道這個答案有什麼問題嗎?


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...