為你的設計選擇正確的軟體架構

2020-12-25 電子產品世界

作者/Alf Mossevig Silicon Labs軟體開發流程產品經理

本文引用地址:http://www.eepw.com.cn/article/201703/344833.htm

  引言

  我們都曾在職業生涯的某個時間點思考過這個問題:你已經把一個想法仔細思考過一陣子,逐漸得出可行的結論,現在,你想要創建一個合適的項目,看是要更進一步探索這個想法或是將其產品化。但是,應該從哪種軟體架構入手呢?Espruino?Arduino?microPython?Segger embOS?MicriumuC/OS-II?以及在uC/OS-II和uC/OS-III之間又有什麼區別呢?究竟該採用初始成本較低的開源架構,還是選擇需要支付前期費用的商業解決方案,來加速你的設計過程呢?

  1軟體架構

  軟體架構即為編寫軟體的一種特定方式,例如,Arduino提供編寫程序代碼的一種特定方式,允許軟體的片段可以跨越多個項目被重新使用。

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

  2作業系統

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

  圖1 軟體構件示意圖

  英文解釋:

  User code 用戶代碼 external library 外部函數庫 standard building blocks 標準構件模塊

  gecko technology Gecko科技 e.g. 例如,

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

  決定採用哪個軟體架構,將會決定你的想法是否可以按時間、按預算推動,或是將你的投資放在風險之中。一般的經驗法則是,如果你的目標快閃記憶體容量是128 KB或更高,並且或是需要通訊功能,便需要一些棧(USB、乙太網絡、SDIO、CAN、Wi-Fi、BLE),長期來看,你最好還是使用作業系統。

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

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

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

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

  圖2 選擇解決方案的成本考慮

  英文解釋:When selecting an MCU,there are many unseen costs to consider.

  當選擇MCU時,需要考慮很多不可見的成本因素。

  Research&evalution 調查和評估

  Acquisition 採集 training 訓練 development 發展 integration&optimizaiton 整合與優化

  Verification&qualification 驗證和授權upgrades&updates 升級與更新Support&maintenance 支持和維護

  www.silabs.com | 為你的設計選擇正確的軟體架構

  在一般情況下,我們看到的是商業解決方案的總體擁有成本(TCO),將比自己組建開放原始碼組件的解決方案要來的更低一些。但既然是商業解決方案便涉及到初始成本,這些廠商通常要求在使用解決方案的前期,取決於你所需要的組件,便必須先支付1萬到10萬美元之間的費用。在另一方面,下載FreeRTOS並開始組裝自己的解決方案,在某些擁有密集資源的應用中,其所花費的金錢,相對會更便宜一些。決定你的項目的最佳解決方案,將高度依賴於它是否是最容易讓你賺到現金,或是能夠為總體擁有成本的工時來「買單」。

  4 候選方案

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

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

  4.1作業系統

  所有在這一個章節中提到的作業系統都具有實時能力(RTOS)。

  4.2商用解決方案

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

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

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

  4.3開源解決方案

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

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

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

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

  4.4架構

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

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

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

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

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

  5 結語

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

相關焦點

  • 你是一名軟體架構師嗎?
    將軟體架構從軟體設計和開發中區分開來的關鍵因素包括:規模的上升、抽象層次的上升, 以及做出正確的設計決策帶來的影響的上升等等。軟體架構就在於能有一個全局視角、能具備更大的視野,理解軟體系統作為一個整體是如何工作的。這些因素對區分軟體開發和軟體架構也許有幫助,但還是無法解釋一些人如何從開發轉到了架構。
  • 軟體架構設計:軟體質量屬性、架構風格的案例
    【案例描述】某軟體公司為某品牌手機廠商開發一套手機應用程式集成開發環境,以提高開發手機應用程式的質量和效率。在初始需求中定義的機器性能條件下,對於一個包含50個對象的設計模型,將其轉換為相應代碼框架時所消耗時間不超過5秒。f.能夠連續運行的時間不小於240水時,意外退出後能夠在1 0秒之內自動重啟。
  • 軟體項目實訓及課程設計指導——系統設計中的系統架構設計示例
    如下示圖為某客戶關係管理系統(CRM系統)總體架構設計結果的分層包圖示例:(2)在軟體應用系統項目的系統概要設計工作中,其次是完成軟體應用系統中的各個組件的劃分,然後再利用UML組件視圖畫出體現出軟體應用系統中的各個功能模塊的構成和相互間的關係;如下示圖為某客戶關係管理系統(CRM系統)的組件圖的局部截圖示例:(3)然後再對各個組件模塊進一步細化並設計出構成組件模塊的各個相關程序類
  • 什麼是軟體架構?
    軟體架構是關於如何組件軟體的一系列重大設計決策的集合,旨在實現期望的質量屬性和其他軟體特性。
  • 原來合格的軟體架構師是這樣!!!
    如果以務實的(pragmatic)眼光看,那這兩者之間必定存在某 個平衡點,但這接著也提出了問題:你如何從開發者變成架構師?將軟體架構從軟體設計和開發中區分開來的關鍵因素包括:規模的上升、抽象層次的上升, 以及做出正確的設計決策帶來的影響的上升等等。
  • 軟體項目實訓及課程設計指導——如何實現面向服務的系統架構設計
    )其實就是一種新型的軟體應用系統的系統體系架構設計形式,在基於SOA架構設計思想所開發實現的企業級軟體應用系統中,軟體應用系統中的各個業務功能的程序模塊是由一些鬆散耦合併且具有統一接口定義的服務組件相互組合而構建的。
  • 軟體架構五大原則,確保你的項目100%成功
    裡氏替換原則在軟體開發中,這一原則意味著派生類必須可替換為它們的基類,但這一原則與勃蘭特·梅耶的「契約式設計」關於如何應用於分布式架構有著相似之處:兩個服務在進行多次有效溝通後,它們之間形成一種「契約」,其定義了兩者的輸入/輸出、結構和約束。
  • 如何從軟體開發人員成長為軟體架構師
    從開發人員到軟體架構師的旅程是一條充滿挑戰和懷疑的艱難道路。許多開發人員從初級開始就發展為高級和團隊領導角色。但是,作為一名軟體工程師,有多個發展方向。在本文中,為您提供一些有關成為軟體架構師的想法。軟體架構師是一位軟體專家,負責對給定的數字產品做出有關系統設計,基礎結構和技術標準(包括語言,工具和平臺)的行政決策。軟體架構師設定願景並監督系統的構建。 此外,軟體架構師應該能夠共享技術遠景和技術指導,並根據軟體項目的要求進行計劃。
  • 軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計
    軟體項目實訓及課程設計指導——如何實現面向對象的系統架構設計1、什麼是面向對象的軟體應用系統的架構設計從軟體應用系統的架構設計師的角度來看,所謂的軟體應用系統的系統架構就是一套構建軟體應用系統的整體結構的各種設計準則
  • 軟體項目實訓及課程設計指導——可擴展和可重用是架構設計的目標
    軟體項目實訓及課程設計指導——可擴展性和可重用性是面向對象架構設計的主要目標1、什麼是合理的軟體應用系統的系統架構設計軟體應用系統的設計人員經常會陷入一種困惑,面向對象系統架構設計結果的評價標準是什麼?
  • 《程式設計師必讀之軟體架構》作者Simon Brown:架構師與程式設計師的區別
    自2008年以來的7年時間裡,Simon在全球28個國家做過有關軟體架構、技術領導力及其與敏捷的平衡等主題的百餘場演講,並於2012年8月在中國舉辦的ArchSummit全球架構師峰會上以「鬱悶的架構師」和「如何設計安全的架構」為主題發表演講,深受與會者好評。Simon已為全球20多個國家的軟體團隊提供諮詢和培訓,他的客戶既有小型技術初創企業,也不乏全球家喻戶曉的品牌公司。
  • 軟體項目實訓及課程設計指導——為什麼要應用和實現SOA架構設計
    軟體項目實訓及課程設計指導——為什麼要應用和實現面向服務的系統架構設計面向對象的架構設計能夠適應不斷變化的軟體系統的需求,而面向切面架構設計是對面向對象架構設計的進一步擴展和完善,但面向對象的架構設計和面向切面架構設計都是針對單一的軟體應用系統設計的方法。
  • 架構設計
    什麼是架構思維降低軟體複雜性,有幾種有效的方式:抽象、分治、復用和迭代,架構思維就是這幾個的集合抽象思維架構是為了滿足業務需求而存在,需要通常是一些文字性的描述、原型、UI設計圖,這些最終都會變成代碼讓機器執行。我們必須先進行抽象,把需求變成計算機能識別的模型。
  • 想要進階軟體架構師,這5本書才是最好的
    需要讀哪些書,或者有什麼資源,需要考什麼證書麼以及成為一個軟體架構師需要多少經驗等問題。本文就從軟體架構師的角度選擇了5本最好的並且是必讀的書籍因為架構是一個非常廣的主題,它和你如今所處的工作領域息息相關,因此這些書並不能涉及到軟體設計相關的方方面面,但是卻會為你提供構建一個安全和可維護軟體所需的基本工具和技術。
  • 從分而治之的思想到架構的設計
    隔離級別越大,說明打通隔離越困難,修改調整越困難,但同時也意味著設計的架構越容易被遵守。因此當你堅信架構劃分正確,不同部分需要儘可能分割時,可以採用基於進程甚至更高級別的隔離。但對於業務變化依然很大,邊界不清晰,難以把握全局時,採用不同進程隔離或者不同jar的隔離可能就不合適,因為架構依然可能還需要調整,如果已經拆分了進程、jar那麼架構調整的難度將大幅增加。
  • 你該如何讓選擇工業設計軟體?
    點擊關注卓爾謨工業設計小站,置頂公眾號-你的工設資訊早餐-工業設計專業學生或從事工業設計的人應該熟練掌握哪些軟體
  • 工業設計軟體選擇
    首先,根據你在工業設計中選擇哪個領域,你可能需要比3D軟體更多的2D軟體類型。反之亦然。
  • 如何成為更好的軟體架構師?這篇3.8K star的文章值得一看
    在進行深層次的探討之前,我們先來看兩個定義:軟體架構師是指那些制定高級設計決策,並確定技術標準(包括軟體編程標準、工具和平臺)的軟體專家。這之中的首席專家就是總架構師。將高級設計細化,並轉化為較低級的設計。
  • 架構設計的四大思維支柱
    筆者在 InfoQ 前文《關於架構演進發展的探討》和《架構演進的第四個趨勢:行業級標準化》中,提出了筆者對架構發展趨勢的一些淺見,也介紹了企業級業務架構方法論的來龍去脈,本文擬基於上述文章提煉一下企業軟體(大家常說的 B 端軟體)架構設計中的四大思維支柱供大家參考。
  • 如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)
    軟體項目實訓及課程設計指導——如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)1、良好的可重用性軟體系統架構設計結果的主要體現可重用性的軟體應用系統的系統架構設計結果主要體現在如下兩個方面——本項目的系統架構設計的結果是可重用的和在本項目的系統架構設計中重用成熟的系統架構設計方案