考慮到硬件團隊需要花兩個月的時間來開發一些硬件,但是到那時我將需要準備好軟件。
我的問題是我該如何編寫軟件並對其進行測試沒有硬件?
是否要遵循任何標準?你如何做到的?
考慮到硬件團隊需要花兩個月的時間來開發一些硬件,但是到那時我將需要準備好軟件。
我的問題是我該如何編寫軟件並對其進行測試沒有硬件?
是否要遵循任何標準?你如何做到的?
在固件開發的初始階段發生硬件故障。解決此問題的常見策略是:
這是模塊化設計再次提供幫助的地方。如果您不能合理地模擬一些低級別的硬件交互,則可以使用該模塊的另一個版本,該版本接觸該硬件,但會將其自己的模擬動作傳遞給更高級別。高層不知道這種情況正在發生。您將不會以這種方式檢查低級模塊,而是以其他所有方式進行檢查。
ol>
總之,請使用良好的軟件設計實踐,當然您應該選擇無論如何都要做。
在沒有對您正在開發的東西或您的硬件最終將基於哪個微控制器家族的任何見識的情況下,大多數微控制器家族都有可用的低成本開發系統,這些系統上帶有一套通用外圍設備,這可能允許您至少模擬某些最終目標硬件。
根據應用程序對硬件的依賴性,您可以僅在標準PC(Windows,Linux ...)上開始實施該項目。無論如何,大多數外圍設備訪問都應該抽象化,因此實現一些虛擬功能並不是什麼大不了的事,稍後將替換它們。如果無法模擬某些行為,則至少可以對系統進行建模(API ...),因此,只要硬件準備就緒,實際的實現就會變得更快,更清晰。 p>
當然有很多無法模擬的東西,例如實時行為或複雜的硬件驅動程序。另一方面,可以使用從文件或網絡端口讀取值的線程輕鬆模擬中斷驅動的ADC。
當然,所有這些高度取決於各種因素:
我首先要在PC上設計幾乎每個固件模塊。
嘗試為您的芯片獲取一個模擬器。您應該模擬所有預期的輸入以及一些意外的輸入。盡可能模塊化/抽象並編寫單元測試。如果可以的話,這些測試可以成為您實際代碼的一部分,並且會變成功能(板子自測試)。
如果您無法獲得模擬器,則可以通過HAL(硬件抽象層)。所有驅動程序都支持它。嘗試在某些C函數調用之後抽象所有特定於平台的程序集,並將其也視為驅動程序。其餘部分作為可移植的C / C ++代碼編寫,並為x86創建一個瘦的HAL,並使用所有測試用例在計算機上運行它。
這樣,當您獲得硬件時,只需調試哈爾它越薄,調試起來就越快,並且一切正常。請記住,如果您使用特定於平台的程序集來加快操作速度,請非常想進行位精確測試。
您的問題有點廣泛。硬件(HW)可能意味著完全定制ASIC / FPGA開發,彙編程序編程的DSP,或“僅”基於現成的微處理器/微控制器/ SoC等的典型嵌入式系統(當然,SoC可能還包含DSP)
但是對於一個為期2個月的項目,我希望它基於某種微控制器:
對於高銷量的產品,使其成為ASIC並不罕見。
p>
無論如何,您應該強調硬件團隊給您一個原型,您可以在絕對期限之前開始測試您的代碼-正如某些人已經提到的那樣,它可能包括一個通用開發板,但是在我認為,為您提供合適的設備是他們的工作,並且可能還會為測試提供一些必需的/類似的外圍設備。
在某種程度上也可以使用仿真器,但是您仍然可能需要描述一些真實世界您可能會獲得的傳感器/數據。
此外,硬件團隊已經可以完成軟件設計,並且所有高級模塊都可以(並且應該)進行實現和單元測試,而無需實際操作。理想情況下,您還將與硬件團隊一起定義一個API,它們將為您提供最低級別的功能,因此它們在硬件方面所做的任何更改(例如,簡單地重新定義它們使用的端口引腳)都將是不一定對您很重要。
在所有情況下,溝通都是關鍵。
是的,您可以在目標板生產之前為目標板開發代碼。
如何?
首先,您必須了解該系統的主要目標。因此,您可以從數字資源,鼠標等廣泛的可用資源中適當選擇控制器。
然後選擇Proteus之類的模擬器。現在您可以開始編碼,它將模擬確切的處理器/控制器。但是您不能期望像硬件那樣的準確性。