IoT工程師如何為你的設(shè)計選擇正確的軟件架構(gòu)
我們都曾在職業(yè)生涯的某個時間點(diǎn)思考過這個問題:現(xiàn)在,你想要創(chuàng)建一個合適的項目,看是要更進(jìn)一步探索這個想法或是將其產(chǎn)品化。但是,應(yīng)該從哪種軟件架構(gòu)入手呢?Espruino?Arduino?micro Python?Segger embOS?MicriumuC/OS-II?以及在uC/OS-II和uC/OS-III之間又有什么區(qū)別呢?究竟該采用初始成本較低的開源架構(gòu),還是選擇需要支付前期費(fèi)用的商業(yè)解決方案,來加速你的設(shè)計過程呢?
什么是軟件架構(gòu)?
在本文件中,將“軟件構(gòu)架”解釋為“編寫軟件的一種特定方式”。例如,Arduino提供編寫程序代碼的一種特定方式,允許軟件的片段可以跨越多個項目被重新使用。
軟件架構(gòu)是由幾個不同的部分所組成,并由以下組件所定義:程序語言、應(yīng)用程序編程接口(API),以及某些工具集的連接。例如,像是在Arduino和Espruino的案例中,軟件架構(gòu)可以被緊密地連接到工具,或是像在Micrium和FreeRTOS的案例中則是會被分離。
什么是操作系統(tǒng)?
因此,該如何選擇一個軟件架構(gòu)呢?首先,我們需要對一些名詞解釋的更明確一點(diǎn),我們已經(jīng)開始提到操作系統(tǒng)(OS)這個名詞。你真正需要寫的是可以執(zhí)行你的特定要求的程序代碼,這些程序代碼將可以把你的產(chǎn)品與其他產(chǎn)品區(qū)分出來。但是,你仍然需要依靠軟件的其他部分,像是ADC的驅(qū)動程序或SD卡的文件系統(tǒng)棧。這些軟件的部分通常被稱為軟件構(gòu)件。
在此用一個比較實質(zhì)的比喻方式,你可以想象你的軟件構(gòu)件就像是磚塊,然后把操作系統(tǒng)視為水泥。在操作系統(tǒng)中定義了磚塊的形狀,以及它們將如何與其他的磚塊互動,因此當(dāng)你添加更多構(gòu)件到軟件之中時,他們將可以繼續(xù)完美地協(xié)同工作。這聽起來相當(dāng)不錯,但你真的需要一個操作系統(tǒng)嗎?增加操作系統(tǒng)也帶來了額外的負(fù)荷,它將會消耗數(shù)千字節(jié)的閃存,為事件的響應(yīng)增加了延遲的時間,并且還需要花費(fèi)些許的時間學(xué)習(xí)如何在操作系統(tǒng)環(huán)境中編寫程序。
決定采用哪個軟件架構(gòu),將會決定你的想法是否可以按時間、按預(yù)算地推動,或是將你的投資放在風(fēng)險之中。
一般的經(jīng)驗法則是,如果你的目標(biāo)閃存容量是128 KB或更高,并且或是需要通訊功能,便需要一些棧(USB、以太網(wǎng)絡(luò)、SDIO、CAN、Wi-Fi、BLE),長期來看,你最好還是使用操作系統(tǒng)。
在操作系統(tǒng)中最重要的其中一件事情便是調(diào)度程序(scheduler)。調(diào)度程序是用在為可能會爭奪相同資源的不同任務(wù)、分配資源和處理時間的組件。在一般情況下,調(diào)度程序有兩種作業(yè)的方式,而這正是“實時”在實時操作系統(tǒng)(RTOS)的意義所在。實時意味著在一個特定的時間內(nèi),會有一個特定的任務(wù)將會被執(zhí)行。假設(shè)你得到一個你需要處理的射頻封包,無論你的設(shè)備目前正在做什么事,實時操作系統(tǒng)的核心會先離開它目前所做的任務(wù),先完成這一個高優(yōu)先等級的任務(wù)。這種類型的行為在處理器的利用上并不是最有效率的方式,但例如在馬達(dá)控制應(yīng)用中,它在通訊棧與應(yīng)用中最需要重視的便是反應(yīng)時間的議題。
商用與開源解決方案的比較
舉例來說,如果你已經(jīng)想通了是否需要采用實時操作系統(tǒng),并開始組建軟件需求。你可能知道,你需要一個USB棧和以太網(wǎng)絡(luò)棧,搭配外部MAC/PHY驅(qū)動程序來一起將設(shè)備連接到互聯(lián)網(wǎng)。但是,你該從哪里開始呢?你真的只需要為你首選的微控制器下載最新的FreeRTOS模板,并繼續(xù)下載開源軟件并放到裝置中就可以了嗎?或者你只是需要去找有你所需軟件的商業(yè)供貨商,并獲得完整的軟件組合?
為了做出更明智的決定,我們經(jīng)常談?wù)撘o選定的解決方案一個總體擁有成本(TCO)的概念。所謂的總體擁有成本包含的不僅是你為軟件付出的貨幣價值,還包括花費(fèi)在尋找解決方案、組裝不同的構(gòu)件,并將不同的構(gòu)件整合到你的項目,以及開發(fā)、測試和生產(chǎn)的工作時間。
在一般情況下,我們看到的是商業(yè)解決方案的總體擁有成本(TCO),將比自己組建開放原始碼組件的解決方案要來的更低一些。但既然是商業(yè)解決方案便涉及到初始成本,這些廠商通常要求在使用解決方案的前期,取決于你所需要的組件,便必須先支付1萬到10萬美元之間的費(fèi)用。在另一方面,下載FreeRTOS并開始組裝自己的解決方案,在某些擁有密集資源的應(yīng)用中,其所花費(fèi)的金錢,相對會更便宜一些。
決定你的項目的最佳解決方案,將高度依賴于它是否是最容易讓你賺到現(xiàn)金,或是能夠為總體擁有成本的工時來“買單”。