為你的設計選擇正確的軟件架構
作者/Alf Mossevig Silicon Labs軟件開(kāi)發(fā)流程產(chǎn)品經(jīng)理
本文引用地址:http://dyxdggzs.com/article/201703/344833.htm引言
我們都曾在職業(yè)生涯的某個(gè)時(shí)間點(diǎn)思考過(guò)這個(gè)問(wèn)題:你已經(jīng)把一個(gè)想法仔細思考過(guò)一陣子,逐漸得出可行的結論,現在,你想要創(chuàng )建一個(gè)合適的項目,看是要更進(jìn)一步探索這個(gè)想法或是將其產(chǎn)品化。但是,應該從哪種軟件架構入手呢?Espruino?Arduino?microPython?Segger embOS?MicriumuC/OS-II?以及在uC/OS-II和uC/OS-III之間又有什么區別呢?究竟該采用初始成本較低的開(kāi)源架構,還是選擇需要支付前期費用的商業(yè)解決方案,來(lái)加速你的設計過(guò)程呢?
1軟件架構
軟件架構即為編寫(xiě)軟件的一種特定方式,例如,Arduino提供編寫(xiě)程序代碼的一種特定方式,允許軟件的片段可以跨越多個(gè)項目被重新使用。
軟件架構是由幾個(gè)不同的部分所組成,并由以下組件所定義:程序語(yǔ)言、應用程序編程接口(API),以及某些工具集的連接。例如,像是在A(yíng)rduino和Espruino的案例中,軟件架構可以被緊密地連接到工具,而在Micrium和FreeRTOS的案例中則是被分離開(kāi)的。
2操作系統
因此,該如何選擇一個(gè)軟件架構呢?首先,我們需要對一些名詞解釋的更明確一點(diǎn),我們已經(jīng)開(kāi)始提到操作系統(OS)這個(gè)名詞。你真正需要寫(xiě)的是可以執行你的特定要求的程序代碼,這些程序代碼將可以把你的產(chǎn)品與其他產(chǎn)品區分出來(lái)。但是,你仍然需要依靠軟件的其他部分,像是ADC的驅動(dòng)程序或SD卡的文件系統棧。這些軟件的部分通常被稱(chēng)為軟件構件。
圖1 軟件構件示意圖
英文解釋?zhuān)?/p>
User code 用戶(hù)代碼 external library 外部函數庫 standard building blocks 標準構件模塊
gecko technology Gecko科技 e.g. 例如,
在此用一個(gè)比較實(shí)質(zhì)的比喻方式,你可以想象你的軟件構件就像是磚塊(如圖1),然后把操作系統視為水泥。在操作系統中定義了磚塊的形狀,以及它們將如何與其他的磚塊互動(dòng)。因此,當你添加更多構件到軟件之中時(shí),他們將可以繼續完美地協(xié)同工作。這聽(tīng)起來(lái)相當不錯,但你真的需要一個(gè)操作系統嗎?增加操作系統也帶來(lái)了額外的負荷,它將會(huì )消耗數千字節的閃存,為事件的響應增加了延遲的時(shí)間,并且還需要花費些許的時(shí)間學(xué)習如何在操作系統環(huán)境中編寫(xiě)程序。
決定采用哪個(gè)軟件架構,將會(huì )決定你的想法是否可以按時(shí)間、按預算推動(dòng),或是將你的投資放在風(fēng)險之中。一般的經(jīng)驗法則是,如果你的目標閃存容量是128 KB或更高,并且或是需要通訊功能,便需要一些棧(USB、以太網(wǎng)絡(luò )、SDIO、CAN、Wi-Fi、BLE),長(cháng)期來(lái)看,你最好還是使用操作系統。
在操作系統中最重要的是調度程序(scheduler)。調度程序是用在為可能會(huì )爭奪相同資源的不同任務(wù)、分配資源和處理時(shí)間的組件。在一般情況下,調度程序有兩種作業(yè)的方式,而這正是“實(shí)時(shí)”在實(shí)時(shí)操作系統(RTOS)的意義所在。實(shí)時(shí)意味著(zhù)在一個(gè)特定的時(shí)間內,會(huì )有一個(gè)特定的任務(wù)將會(huì )被執行。假設你得到一個(gè)你需要處理的射頻封包,無(wú)論你的設備目前正在做什么事,實(shí)時(shí)操作系統的核心會(huì )先離開(kāi)它目前所做的任務(wù),先完成這一個(gè)高優(yōu)先等級的任務(wù)。這種類(lèi)型的行為在處理器的利用上并不是最有效率的方式,但例如在馬達控制應用中,它在通訊棧與應用中最需要重視的便是反應時(shí)間。
3商用與開(kāi)源解決方案的比較
如果你已經(jīng)想通了是否需要采用實(shí)時(shí)操作系統,并開(kāi)始組建軟件需求。例如,你可能知道,你需要一個(gè)USB棧和以太網(wǎng)絡(luò )棧,搭配外部MAC/PHY驅動(dòng)程序來(lái)一起將設備連接到互聯(lián)網(wǎng)。但是,你該從哪里開(kāi)始呢?你真的只需要為你首選的微控制器下載最新的FreeRTOS模板,并繼續下載開(kāi)源軟件并放到裝置中就可以了嗎?或者你只是需要去找有你所需軟件的商業(yè)供貨商,并獲得完整的軟件組合比較好呢?
為了做出更明智的決定,我們經(jīng)常談?wù)撘o選定的解決方案一個(gè)總體擁有成本(TCO)的概念。所謂的總體擁有成本包含的不僅是你為軟件付出的貨幣價(jià)值,還包括花費在尋找解決方案、組裝不同的構件,并將不同的構件整合到你的項目,以及開(kāi)發(fā)、測試和生產(chǎn)的工作時(shí)間。
圖2 選擇解決方案的成本考慮
英文解釋?zhuān)篧hen selecting an MCU,there are many unseen costs to consider.
當選擇MCU時(shí),需要考慮很多不可見(jiàn)的成本因素。
Research&evalution 調查和評估
Acquisition 采集 training 訓練 development 發(fā)展 integration&optimizaiton 整合與優(yōu)化
Verification&qualification 驗證和授權upgrades&updates 升級與更新Support&maintenance 支持和維護
www.silabs.com | 為你的設計選擇正確的軟件架構
在一般情況下,我們看到的是商業(yè)解決方案的總體擁有成本(TCO),將比自己組建開(kāi)放原始碼組件的解決方案要來(lái)的更低一些。但既然是商業(yè)解決方案便涉及到初始成本,這些廠(chǎng)商通常要求在使用解決方案的前期,取決于你所需要的組件,便必須先支付1萬(wàn)到10萬(wàn)美元之間的費用。在另一方面,下載FreeRTOS并開(kāi)始組裝自己的解決方案,在某些擁有密集資源的應用中,其所花費的金錢(qián),相對會(huì )更便宜一些。決定你的項目的最佳解決方案,將高度依賴(lài)于它是否是最容易讓你賺到現金,或是能夠為總體擁有成本的工時(shí)來(lái)“買(mǎi)單”。
4 候選方案
所以,當你已經(jīng)看到這里,你的大腦中可能已經(jīng)開(kāi)始吶喊:“只要給我一個(gè)可以讓我開(kāi)始使用的架構就好了!”
可惜沒(méi)有那么快,肯定有一些方案的選項是比其他選項更好,微控制器的應用非常多樣性,肯定沒(méi)有那種一個(gè)尺寸便適合所有需求的解決方案。我們先來(lái)了解許多最流行的操作系統和軟件架構,并分別仔細地討論:
4.1操作系統
所有在這一個(gè)章節中提到的操作系統都具有實(shí)時(shí)能力(RTOS)。
4.2商用解決方案
? Micrium uC/OS-II與uC/OS-III:這是在微控制器業(yè)界最流行的兩個(gè)實(shí)時(shí)操作系統,特別是因為其創(chuàng )新的商業(yè)模式,因為Micrium公司允許你下載完整的軟件套件,并開(kāi)始發(fā)展,等你真正開(kāi)始產(chǎn)生營(yíng)收后,才需要開(kāi)始支付解決方案的費用。他們在安全至上的系統中擁有重要的地位,并且他們的大部分軟件構件都已經(jīng)通過(guò)認證。
? Segger embOS:嵌入式軟件市場(chǎng)的新進(jìn)入者,但這并不意味著(zhù)他們是新手。該軟件產(chǎn)品已經(jīng)開(kāi)發(fā)了超過(guò)20年的時(shí)間,并已經(jīng)使用在他們自己的硬件產(chǎn)品之中,因此對裝置的支持程度非常好,并配有一個(gè)優(yōu)秀的驅動(dòng)程序庫。
? Express Logic ThreadX:由行業(yè)的資深人士所創(chuàng )辦,該公司專(zhuān)注在所有關(guān)于性能的事物上,并擠壓出元器件中每一個(gè)時(shí)鐘周期的效能。它通常被看作是操作系統中的勞斯萊斯,并已經(jīng)有很多認證被使用在安全至上的系統之中。
4.3開(kāi)源解決方案
? FreeRTOS:FreeRTOS跟Micrium uC/OS一樣,都是在同行業(yè)中最常被采用的實(shí)時(shí)操作系統之一。它有一個(gè)龐大的社群,有很多人都在為軟件做出貢獻,像是TCP/IP棧,但做為開(kāi)源軟件,便意味著(zhù)沒(méi)有公司會(huì )負責整合,因此需要更多的工作來(lái)創(chuàng )建一個(gè)整合的解決方案。
? 也有一些公司在FreeRTOS的生態(tài)系統中,專(zhuān)門(mén)從事將差異化的軟件構件提供給那些需要整合協(xié)助的客戶(hù),例如,Wittenstein高完整性系統公司提供稱(chēng)為SAFERTOS安全認證的FreeRTOS替換核心,以及HCC嵌入式公司提供可以與任何實(shí)時(shí)操作系統工作的USB、以太網(wǎng)絡(luò )和文件系統。
? mbed OS:mbed OS解決一些你通常會(huì )在開(kāi)源軟件所遇到的痛點(diǎn),因為ARM這一家公司會(huì )負責整合的工作。然而,它仍然是處于萌芽階段,所以如果你想要有些貢獻就可以去這里。
? RIOT OS:RIOT OS被冠以“物聯(lián)網(wǎng)中最友好的操作系統”,它是以通訊概念為基礎所建立起來(lái)的操作系統。這使得它即使在面對困難的通訊問(wèn)題時(shí),仍然精簡(jiǎn)且高效率。然而它仍然還在積極發(fā)展的階段當中,所以你得計劃多花幾個(gè)小時(shí)來(lái)進(jìn)行除錯。
4.4架構
有一些操作系統的功能就像是將磚塊黏合在一起的水泥一樣,會(huì )與發(fā)展框架緊密地結合在一起,因此一般不能使用軟件本身做為項目的一部分,你必須圍繞著(zhù)它來(lái)進(jìn)行整個(gè)開(kāi)發(fā)流程。這些框架往往是使用比C++更高階的語(yǔ)言所編寫(xiě),通??梢栽趯?shí)時(shí)操作系統上運行。
? mbed:mbed也出現在這里,這時(shí)則做為快速成型的項目。它是用C++編寫(xiě),并對大多數微控制器和電路板有絕佳的支持,擁有一個(gè)龐大的元件程序庫,和一個(gè)采用網(wǎng)頁(yè)架構的漂亮集成開(kāi)發(fā)環(huán)境(IDE)。目前,在它準備全面部署之前,它仍然需要一點(diǎn)成熟的時(shí)間,但它很適合硬件原型的開(kāi)發(fā)。
? Espruino:Espruino是在微控制器上運行的實(shí)時(shí)JavaScript解釋器。它允許你能夠動(dòng)態(tài)地更改程序代碼,甚至不需要讀寫(xiě)微控制器便可以撰寫(xiě)程序代碼。在它開(kāi)始量產(chǎn)之前,仍然需要一些時(shí)間來(lái)發(fā)展,但它很適合用于硬件原型,并呈現出成為一個(gè)不可忽視軟件架構的巨大潛力。
? microPython:microPython所能做的事與Espruino大致相同,差別僅在于其使用Python來(lái)代替JavaScript。它發(fā)展的概念,便是讓你從產(chǎn)品開(kāi)發(fā)的一開(kāi)始到量產(chǎn),都能夠支持預先編譯的程序代碼,并使用C語(yǔ)言來(lái)編寫(xiě)時(shí)序至上的程序代碼。目前仍在開(kāi)發(fā)當中。
? microEJ:microEJ是一個(gè)采用Java架構的框架,讓你輕松地為你的設備打造好看的圖形化應用程序。它已經(jīng)在許多智能手表和一些物聯(lián)網(wǎng)(IoT)設備中使用。
5 結語(yǔ)
如果你想要著(zhù)手進(jìn)行設備的開(kāi)發(fā),而無(wú)需安裝單一的程序,像是mbed和microPython這類(lèi)的框架,便是入門(mén)的好方法。但是,如果你要建立更大的部署,采用一個(gè)純粹的實(shí)時(shí)操作系統將會(huì )是更好的選擇。如果使用工作時(shí)間而不是金錢(qián)來(lái)當作軟件的投資,對你的公司來(lái)說(shuō)會(huì )更為輕松的話(huà),像是FreeRTOS或RIOT這類(lèi)非商業(yè)解決方案便有其優(yōu)勢。如果你的公司能負擔得起前期投資,像是Segger、Express Logic和Micrium的商業(yè)解決方案,將大大降低軟件開(kāi)發(fā)風(fēng)險和縮短產(chǎn)品上市的時(shí)間。在商業(yè)解決方案中,特別像是Micrium的穩定性和認證的程序代碼基礎,廣泛普及的部署,良好的元器件支持,開(kāi)放的原始碼,以及適合大多數經(jīng)濟效益的商業(yè)模式,更使其在商業(yè)解決方案中顯得特別突出。
評論