系統架構師

當前位置 /首頁/職業師/系統架構師/列表

IoT專案如何選擇正確的軟體架構

你想要建立一個合適的專案,看是要更進一步探索這個想法還是將其產品化。但是,應該從哪種軟體架構入手呢?究竟該採用初始成本較低的開源架構,還是選擇需要支付前期費用的商業解決方案,來加速你的設計過程呢?一起來看看!

IoT專案如何選擇正確的軟體架構

  什麼是軟體架構?

在本檔案中,將“軟體構架”解釋為“編寫軟體的一種特定方式”。例如,Arduino提供編寫程式程式碼的一種特定方式,允許軟體的片段可以跨越多個專案被重新使用。

軟體架構是由幾個不同的部分所組成,並由以下元件所定義:程式語言、應用程式程式設計介面(API),以及某些工具集的連線。例如,像是在Arduino和Espruino的案例中,軟體架構可以被緊密地連線到工具,或是像在Micrium和FreeRTOS的案例中則是會被分離。

  什麼是作業系統?

因此,該如何選擇一個軟體架構呢?首先,我們需要對一些名詞解釋的更明確一點,我們已經開始提到操作系統(OS)這個名詞。你真正需要寫的是可以執行你的特定要求的程式程式碼,這些程式程式碼將可以把你的產品與其他產品區分出來。但是,你仍然需要依靠軟體的其他部分,像是ADC的驅動程式或SD卡的檔案系統棧。這些軟體的部分通常被稱為軟體構件。

在此用一個比較實質的比喻方式,你可以想象你的軟體構件就像是磚塊,然後把作業系統視為水泥。在作業系統中定義了磚塊的形狀,以及它們將如何與其他的磚塊互動,因此當你新增更多構件到軟體之中時,他們將可以繼續完美地協同工作。這聽起來相當不錯,但你真的需要一個作業系統嗎?增加作業系統也帶來了額外的負荷,它將會消耗數千位元組的快閃記憶體,為事件的響應增加了延遲的時間,並且還需要花費些許的時間學習如何在作業系統環境中編寫程式。

決定採用哪個軟體架構,將會決定你的想法是否可以按時間、按預算地推動,或是將你的投資放在風險之中。

一般的經驗法則是,如果你的目標快閃記憶體容量是128 KB或更高,並且或是需要通訊功能,便需要一些棧(USB、以太網路、SDIO、CAN、Wi-Fi、BLE),長期來看,你最好還是使用作業系統。

在作業系統中最重要的其中一件事情便是排程程式(scheduler)。排程程式是用在為可能會爭奪相同資源的不同任務、分配資源和處理時間的元件。在一般情況下,排程程式有兩種作業的方式,而這正是“實時”在實時作業系統(RTOS)的意義所在。實時意味著在一個特定的時間內,會有一個特定的任務將會被執行。假設你得到一個你需要處理的射頻封包,無論你的裝置目前正在做什麼事,實時作業系統的核心會先離開它目前所做的任務,先完成這一個高優先等級的任務。這種型別的行為在處理器的利用上並不是最有效率的方式,但例如在馬達控制應用中,它在通訊棧與應用中最需要重視的便是反應時間的議題。

  商用與開源解決方案的比較

舉例來說,如果你已經想通了是否需要採用實時作業系統,並開始組建軟體需求。你可能知道,你需要一個USB棧和乙太網絡棧,搭配外部MAC/PHY驅動程式來一起將裝置連線到網際網路。但是,你該從哪裡開始呢?你真的只需要為你首選的微控制器下載最新的FreeRTOS模板,並繼續下載開源軟體並放到裝置中就可以了嗎?或者你只是需要去找有你所需軟體的商業供貨商,並獲得完整的軟體組合?

為了做出更明智的決定,我們經常談論要給選定的解決方案一個總體擁有成本(TCO)的概念。所謂的總體擁有成本包含的不僅是你為軟體付出的貨幣價值,還包括花費在尋找解決方案、組裝不同的構件,並將不同的構件整合到你的專案,以及開發、測試和生產的工作時間。

在一般情況下,我們看到的是商業解決方案的總體擁有成本(TCO),將比自己組建開放原始碼元件的解決方案要來的更低一些。但既然是商業解決方案便涉及到初始成本,這些廠商通常要求在使用解決方案的前期,取決於你所需要的元件,便必須先支付1萬到10萬美元之間的費用。在另一方面,下載FreeRTOS並開始組裝自己的解決方案,在某些擁有密集資源的應用中,其所花費的金錢,相對會更便宜一些。

決定你的專案的最佳解決方案,將高度依賴於它是否是最容易讓你賺到現金,或是能夠為總體擁有成本的工時來“買單”。

  候選方案

所以,當你已經看到這裡,你的大腦中可能已經開始吶喊:“只要給我一個可以讓我開始使用的架構就好了!”

可惜沒有那麼快,肯定有一些方案的選項是比其他選項更好,微控制器的應用非常多樣性,肯定沒有那種一個尺寸便適合所有需求的解決方案。我們先來了解許多最流行的作業系統和軟體架構,並分別仔細地討論(本文所提到的作業系統都具有實時能力):

  1)商用解決方案

Micrium uC/OS-II與uC/OS-III

這是在微控制器業界最流行的兩個實時作業系統,特別是因為其創新的商業模式,因為Micrium公司允許你下載完整的軟體套件,並開始發展,等你真正開始產生營收後,才需要開始支付解決方案的費用。他們在安全至上的系統中擁有重要的地位,並且他們的大部分軟體構件都已經通過認證。

Segger embOS

嵌入式軟體市場的新進入者,但這並不意味著他們是新手。該軟體產品已經開發了超過20年的時間,並已經使用在他們自己的硬體產品之中,因此對裝置的支援程度非常好,並配有一個優秀的驅動程式庫。

Express Logic ThreadX

由行業的資深人士所創辦,該公司專注在所有關於效能的事物上,並擠壓出元器件中每一個時鐘週期的效能。它通常被看作是作業系統中的勞斯萊斯,並已經有很多認證被使用在安全至上的系統之中。

  2)開源解決方案

FreeRTOS

FreeRTOS跟MicriumuC/OS一樣,都是在同行業中最常被採用的實時作業系統之一。它有一個龐大的社群,有很多人都在為軟體做出貢獻,像是TCP/IP棧,但做為開源軟體,便意味著沒有公司會負責整合,因此需要更多的工作來建立一個整合的解決方案。

也有一些公司在FreeRTOS的生態系統中,專門從事將差異化的軟體構件提供給那些需要整合協助的客戶,例如,Wittenstein高完整性系統公司提供稱為SAFERTOS安全認證的FreeRTOS替換核心,以及HCC嵌入式公司提供可以與任何實時作業系統工作的USB、乙太網絡和檔案系統。

mbed OS

mbed OS解決一些你通常會在開源軟體所遇到的痛點,因為ARM這一家公司會負責整合的工作。然而,它仍然是處於萌芽階段,所以如果你想要有些貢獻就可以去這裡。

RIOT OS

RIOT OS被冠以“物聯網中最友好的作業系統”,它是以通訊概念為基礎所建立起來的作業系統。這使得它即使在面對困難的通訊問題時,仍然精簡且高效率。然而它仍然還在積極發展的階段當中,所以你得計劃多花幾個小時來進行除錯。

3)架構

有一些作業系統的功能就像是將磚塊黏合在一起的水泥一樣,會與發展框架緊密地結合在一起,因此一般不能使用軟體本身做為專案的一部分,你必須圍繞著它來進行整個開發流程。這些框架往往是使用比C++更高階的語言所編寫,通常可以在實時作業系統上執行。

mbed

mbed也出現在這裡,這時則做為快速成型的`專案。它是用C++編寫,並對大多數微控制器和電路板有絕佳的支援,擁有一個龐大的元件程式庫,和一個採用網頁架構的漂亮整合開發環境(IDE)。目前,在它準備全面部署之前,它仍然需要一點成熟的時間,但它很適合硬體原型的開發。

Espruino

Espruino是在微控制器上執行的實時JavaScript直譯器。它允許你能夠動態地更改程式程式碼,甚至不需要讀寫微控制器便可以撰寫程式程式碼。在它開始量產之前,仍然需要一些時間來發展,但它很適合用於硬體原型,並呈現出成為一個不可忽視軟體架構的巨大潛力。

microPython

microPython所能做的事與Espruino大致相同,差別僅在於其使用Python來代替JavaScript。它發展的概念,便是讓你從產品開發的一開始到量產,都能夠支援預先編譯的程式程式碼,並使用C語言來編寫時序至上的程式程式碼。目前仍在開發當中。

microEJ

microEJ是一個採用Java架構的框架,讓你輕鬆地為你的裝置打造好看的圖形化應用程式。它已經在許多智慧手錶和一些物聯網(IoT)裝置中使用。

如果你想要著手進行裝置的開發,而無需安裝單一的程式,像是mbed和microPython這類的框架,便是入門的好方法。但是,如果你要建立更大的部署,採用一個純粹的實時作業系統將會是更好的選擇。如果使用工作時間而不是金錢來當作軟體的投資,對你的公司來說會更為輕鬆的話,像是FreeRTOS或RIOT這類非商業解決方案便有其優勢。如果你的公司能負擔得起前期投資,像是Segger、Express Logic和Micrium的商業解決方案,將大大降低軟體開發風險和縮短產品上市的時間。在商業解決方案中,特別像是Micrium的穩定性和認證的程式程式碼基礎,廣泛普及的部署,良好的元器件支援,開放的原始碼,以及適合大多數經濟效益的商業模式,更使其在商業解決方案中顯得特別突出。

TAG標籤:專案 IoT 軟體架構 #