很多人開始一個(gè)新的嵌入式項(xiàng)目,第一反應(yīng)是購買開發(fā)板。一旦有了開發(fā)板,嵌入式開發(fā)人員就可以設(shè)置開發(fā)環(huán)境,獲得一些示例代碼,開始運(yùn)行并編寫項(xiàng)目代碼。但是這真的是開發(fā)嵌入式軟件的最佳方式嗎?自下而上的方法真的能最有效地實(shí)現(xiàn)企業(yè)和客戶的目標(biāo)嗎?
自下而上方法的問題
嵌入式軟件開發(fā)人員自然會(huì)自下而上地思考。假設(shè)我告訴一個(gè)團(tuán)隊(duì),一個(gè)產(chǎn)品需要的第一個(gè)功能是一個(gè)可以打開和關(guān)閉的加熱器。我不知道加熱器是如何工作的。沒有人問最小值和最大值、客戶安全機(jī)制、滯后、砰砰控制或諸如此類的需求。相反,我被問及加熱器連接的GPIO引腳、GPIO外圍設(shè)備如何工作、必須開發(fā)的驅(qū)動(dòng)程序等。
事實(shí)是那些低級(jí)的細(xì)節(jié)并不重要。客戶、你的老板和企業(yè)并不關(guān)心這些細(xì)節(jié)。他們需要一個(gè)可以開關(guān)的加熱器,有最小值和最大值,可能還有超時(shí)等等。事實(shí)上,他們需要盡早看到這個(gè)軟件及其行為,以驗(yàn)證功能并確保產(chǎn)品特性符合他們的需求。
嵌入式開發(fā)人員不是從產(chǎn)品特性開始,從應(yīng)用程序堆棧的頂部獲得早期反饋,而是關(guān)注底層細(xì)節(jié),并逐步提升。他們得到一個(gè)開發(fā)板,編寫一堆驅(qū)動(dòng)程序,集成中間件,通常,經(jīng)過幾個(gè)月的努力,最終得到應(yīng)用程序代碼。在此期間,開發(fā)人員在開發(fā)板上編寫代碼,通常沒有足夠的工具,這將經(jīng)歷一個(gè)非常緩慢的編譯、擦除、編程和調(diào)試周期。
嵌入式軟件的自上而下方法
在開發(fā)嵌入式產(chǎn)品時(shí),你確實(shí)希望盡快獲得應(yīng)用程序代碼。你越早在客戶面前獲得產(chǎn)品及其功能的反饋越好。你可能會(huì)發(fā)現(xiàn)產(chǎn)品走錯(cuò)了路,甚至你的團(tuán)隊(duì)認(rèn)為非常棒的產(chǎn)品變成了死胡同!如果是這樣的話,所有在開發(fā)板上工作以啟動(dòng)和運(yùn)行低級(jí)代碼的時(shí)間都將被浪費(fèi),更不用說所有的錢了。
在許多情況下,一種更好的方法(老實(shí)說,沒有辦法對(duì)它們?nèi)窟M(jìn)行規(guī)則化)是從應(yīng)用程序代碼開始,并朝著低級(jí)代碼的方向努力。這對(duì)嵌入式開發(fā)人員來說聽起來很荒謬,但它會(huì)帶來更好的產(chǎn)品。如果你從應(yīng)用程序開始,你可以快速地在客戶面前獲得功能??蛻舴答佒陵P(guān)重要。你會(huì)發(fā)現(xiàn),你被迫為尚未編寫的低級(jí)代碼創(chuàng)建接口。你可能正在PC上進(jìn)行設(shè)計(jì),并使用網(wǎng)絡(luò)適配器作為模擬USART。該接口將使你的代碼更加靈活,這樣你就可以更好地測(cè)試、移植它,并在其他產(chǎn)品中重用它。事實(shí)上,這些接口將使你更容易測(cè)試代碼,并且你的代碼不會(huì)關(guān)心底層細(xì)節(jié)。你的代碼將與硬件解耦!
改變你的思維方式
我們可以想出很多借口來解釋為什么我們應(yīng)該在開發(fā)板上開發(fā)嵌入式軟件。我們可能會(huì)說,我們需要硬件加速,或者我們需要了解目標(biāo)硬件的某些功能才能構(gòu)建系統(tǒng)。有時(shí)情況確實(shí)如此,但你通??梢詾閼?yīng)用程序代碼抽象這些細(xì)節(jié)?;謴?fù)機(jī)制、固件更新等可能需要低級(jí)別的詳細(xì)信息。
如果你在早期階段放棄開發(fā)板,專注于應(yīng)用程序代碼,你會(huì)更快地行動(dòng),擁有更靈活的代碼庫,獲得客戶反饋,最終獲得更可靠的系統(tǒng)。這不是一個(gè)保證,但在時(shí)間和預(yù)算上更有利于你。
訣竅是嵌入式開發(fā)人員從上到下改變你對(duì)開發(fā)嵌入式軟件的看法,而不是自下而上。