當(dāng)嵌入式軟件開發(fā)人員要開始一個(gè)新項(xiàng)目時(shí),他們做的第一件事就是要一個(gè)開發(fā)工具包。開發(fā)工具包允許開發(fā)團(tuán)隊(duì)熟悉微控制器及其外設(shè)。然后,他們可以開始用分隔板之類的東西拼湊一個(gè)系統(tǒng)。
這種方法的問題在于,它迫使開發(fā)人員從頭開始思考。他們專注于他們正在使用的硬件。是的,這是難題的一個(gè)重要部分,但是低層次的思考往往會(huì)導(dǎo)致緊密耦合的代碼、硬件依賴性,并且客戶幾個(gè)月都看不到任何結(jié)果。
在今天的開發(fā)環(huán)境中,沒有理由為什么一個(gè)團(tuán)隊(duì)不能從第一天開始模擬他們的系統(tǒng)。事實(shí)上,嵌入式團(tuán)隊(duì)需要采用模擬來使他們的實(shí)踐現(xiàn)代化并取得成功有三個(gè)原因。
原因1–更快的上市時(shí)間和更低的開發(fā)成本
幾十年來,許多工具和服務(wù)公司都在吹噓更快上市和更低成本的能力。這些方法是否真的有效還有待討論。
任何產(chǎn)品公司的目標(biāo)都是盡可能快地開發(fā)他們的產(chǎn)品。在許多情況下,產(chǎn)品開始是模糊的。他們認(rèn)為自己知道顧客想要什么,需要什么,但這通常只是猜測。
如果你從主機(jī)上的模擬開始,你會(huì)立即放棄對(duì)硬件的關(guān)注。相反,你要關(guān)注客戶和他們的需求。這意味著在第一天,你正在編寫以客戶為中心的代碼。不是為使LED閃爍或傳感器被讀取而設(shè)計(jì)的代碼。雖然這些都很重要,但產(chǎn)品的最終目標(biāo)是向客戶交付價(jià)值。
如果客戶提前拿到產(chǎn)品,他們可以告訴你產(chǎn)品是否符合他們的需求。他們可能認(rèn)為他們需要一件東西,但是在他們?cè)囼?yàn)過之后,他們意識(shí)到他們需要?jiǎng)e的東西。如果你已經(jīng)設(shè)計(jì)了整個(gè)產(chǎn)品,這意味著你必須回去重做它的大部分。這既費(fèi)時(shí)又費(fèi)錢,還會(huì)推遲你的產(chǎn)品上市。
模擬可以幫助鞏固客戶和管理團(tuán)隊(duì)眼中的產(chǎn)品。當(dāng)改變不涉及硬件時(shí),要容易得多。這意味著應(yīng)用程序可以放在第一位,實(shí)時(shí)的、底層的、硬件的東西可以放在后面。不管怎樣,這很好,因?yàn)橛布静粫?huì)有硬件供你使用幾個(gè)月。有了清晰的產(chǎn)品和分離的應(yīng)用代碼,結(jié)果將是更快的上市時(shí)間和更低的開發(fā)成本!
原因2–模擬鼓勵(lì)硬件去耦
你是否嘗試過移植與硬件緊密耦合的應(yīng)用程序代碼?雖然你可能在開始編寫代碼時(shí)認(rèn)為可以將其耦合到硬件上,但你永遠(yuǎn)不知道什么時(shí)候硬件可能變得不可用,或者什么時(shí)候功能蔓延會(huì)迫使你升級(jí)處理器。
模擬迫使開發(fā)人員立即開始開發(fā)不依賴于硬件的代碼。你從一臺(tái)主機(jī)開始,必須使用抽象和接口來獲得硬件通常會(huì)提供的預(yù)期結(jié)果。通過打破對(duì)硬件的依賴,你會(huì)發(fā)現(xiàn)你自然會(huì)寫出更可重用、可移植和可伸縮的代碼。
將硬件從軟件中分離出來有很多好處。例如,它在開發(fā)過程的早期為團(tuán)隊(duì)提供了靈活性。他們可以在自己的開發(fā)機(jī)器上運(yùn)行代碼,甚至可以在Raspberry Pi之類的設(shè)備上運(yùn)行代碼。開發(fā)人員可以編寫和測試他們的代碼,而不必等待硬件的出現(xiàn)。事實(shí)上,它可以幫助他們編寫更好的單元測試,更容易集成到CI/CD框架中!
當(dāng)團(tuán)隊(duì)開始模擬時(shí),軟件架構(gòu)和實(shí)現(xiàn)通常更具可伸縮性、可重用性和可移植性。它讓他們思考應(yīng)用程序級(jí)別,這是產(chǎn)品真正的“秘方”。
原因3——在主機(jī)上調(diào)試效率更高
在目標(biāo)上調(diào)試代碼效率不是很高。你必須遵循一個(gè)有點(diǎn)神秘的過程:
l 交叉編譯代碼
l 抹去目標(biāo)
l 對(duì)目標(biāo)編程
l 啟動(dòng)調(diào)試會(huì)話
l 逐句通過代碼
開發(fā)人員平均花費(fèi)20-40%的時(shí)間在調(diào)試上!當(dāng)你用幾個(gè)月的時(shí)間來思考這個(gè)問題時(shí),你會(huì)發(fā)現(xiàn)一年大約有2.5到4個(gè)月的時(shí)間花在了做失敗的工作上!
當(dāng)你有一個(gè)模擬器時(shí),你可以跳過晦澀難懂的目標(biāo)調(diào)試過程。運(yùn)行應(yīng)用程序和重新創(chuàng)建問題通常會(huì)更容易、更快。你可以生成日志信息,以便于識(shí)別問題。當(dāng)你進(jìn)行更改時(shí),只需進(jìn)行更改、編譯并運(yùn)行即可。它很快。目標(biāo)調(diào)試不是。這可能會(huì)更有趣,因?yàn)槟憧梢酝骐娮赢a(chǎn)品,但這浪費(fèi)了很多時(shí)間和資源。
結(jié)論
采用模擬技術(shù)可以極大地改進(jìn)嵌入式軟件,它可以迫使你首先關(guān)注你的應(yīng)用,這有助于客戶更快地鞏固產(chǎn)品。運(yùn)行與底層硬件分離的應(yīng)用程序代碼將鼓勵(lì)代碼的可伸縮性和重用性。你將能夠更好地為你的應(yīng)用程序編寫自動(dòng)化測試,并確保低級(jí)硬件不會(huì)礙事。
考慮使用模擬器編寫軟件可能有點(diǎn)令人畏懼,但這并沒有太大的不同。你可以像在嵌入式目標(biāo)上一樣,在Linux、Windows或MacOS上輕松執(zhí)行你的RTOS。調(diào)試問題會(huì)更快。將代碼部署到客戶面前會(huì)更容易。
雖然需要一點(diǎn)時(shí)間來適應(yīng),但模擬代碼將幫助你更新嵌入式軟件的開發(fā)方式,最終,你會(huì)發(fā)現(xiàn)你可以更快地完成這項(xiàng)工作。