大幅提高物聯網項目的效率
作者:Matt Gordon;Thom Denholm, Silicon Labs(亦稱“芯科科技”)
如果只研讀最新的微控制器數據手冊的話,開發人員會很容易認為高效使用CPU資源(包括內存和時鐘周期),是目前硬件設計中的一個小問題。最新的32位MCU可以在嵌入式空間提供閃存和RAM分配,這在不久前都是聞所未聞的;并且其CPU與之前臺式機獨有的運行速度一樣。然而,近來開發過物聯網產品的人都知道,這些硬件的進步并非空穴來風;它們一直因應著最終用戶的期望和設計要求顯著地變化著。因此,現在比以往任何時候都更重要的是:開發人員要確保其軟件以最大效率運行,并且有效地利用他們的時間。
在現代嵌入式系統中運行的軟件往往有各種來源。應用開發人員編寫的代碼通常與RTOS(實時操作系統)提供商的現成軟件組件相結合,而這些組件又可能利用最初由半導體公司提供的驅動程序代碼。開發人員可以編寫每段代碼來優化效率,但本文更著重于現成的軟件組件中的效率優化。特別是其中兩個組成部分將作為審視本文給出的資源效率的基礎:實時內核和事務文件系統(transactional file system)。Silicon Labs(亦“芯科科技”)將通過本篇技術文章說明如何最大限度地提高物聯網項目的效率,歡迎點擊“閱讀原文”觀看完整文章。
實時內核:高效系統的核心
實時內核是當今許多嵌入式系統中運行的軟件的核心。簡單說,內核是一個調度程序;為基于內核的系統編寫應用程序代碼的開發人員將代碼分為任務,內核負責安排這些任務。那么,內核是main()中無限循環的替代方法,它常常作為裸機(bare-metal)嵌入式系統中的主要調度機制。使用實時內核提供了重要優點,包括提高效率。選擇將其應用代碼基于內核的開發人員可以優化其系統中處理器資源的使用,同時更有效地利用自己的時間。然而,并不是所有的內核都生而相同,因此簡單地決定在新項目中采用內核,并不能保證效率的提升。
調度是內核可能不同且CPU資源的使用效率可以有很大差異的關鍵領域。通過提供一種允許任務以響應事件的方式運行的智能調度機制,內核可幫助開發人員在無限循環中提升效率;其中以固定順序執行任務(或換句話說,函數)。基于內核的應用程序的確切效率部分取決于其調度程序的實現方式。一個內核的調度程序(只是一段負責決定每個任務何時運行的代碼)最終是種開銷,這個開銷必須不能蠶食掉通過擺脫裸機系統獲得的好處。
通常,在實時內核中,調度是基于優先級的,這意味著應用程序開發人員為其任務分配優先級(通常為數字),并且在做出調度決策時,內核支持更高優先級的任務運行。在這種機制下,內核必須保持某種類型的數據結構、跟蹤應用程序不同任務的優先級以及每個任務的當前狀態。
從Micrium的-C/OS-II內核獲取的一個例子如圖1所示。在OSRdyTbl []中,這里顯示的是8元素數組(每元素八位),每個位表示不同的任務優先級;其中:第一個元素中的最低有效位對應最高優先級;最后一個元素中的最高有效位表示最低優先級。數組的位值反映任務狀態:如果相關優先級的任務準備就緒,則用值1表示;若任務未準備就緒,就用0表示。作為-C / O S - I I調度程序的一部分,附帶的OSRdyTbl []是圖中所示的單個八位變量—OSRdyGrp。
圖1:在μC/OS-II調度程序中,每個任務優先級由數組中的位表示
該變量中的每個位表示數組中的一整行或元素:1位表示對應的行至少有一個就緒任務;0位表示該行的任務都沒就緒。通過使用清單1中所示的代碼首先掃描OSRdyGrp、再掃描OSRdyTbl[],-C/OS-II可以確定在任何給定時間已準備好運行的最高優先級任務。如列表所示,此操作很高效,只需要兩行C代碼。當然,緊湊、高效的代碼只是開發人員在內核中尋求的特性之一。鑒于大多數新MCU提供的閃存要相對多于RAM,對于開發人員來說,考慮內核所占用空間的數據端也很重要。對于內核的調度程序來說,臃腫的RAM占用會導致過多開銷,從而減少多任務應用程序代碼通常帶來的好處。
內核可以采用兩種方法來分配多任務所需的基本資源:分配這些資源的責任可以留給應用代碼;或者內核本身可以處理分配。在任何內核中必然會存在某些變量和數據結構,因為它們對于執行多任務服務至關重要,所以這些變量和數據結構完全放在內核中。然而,對諸如用于記錄每個任務狀態的TCB(或任務控制塊)等數據結構,或甚至對于在上下文切換時存儲CPU寄存器值的堆棧,內核提供者可以選擇在內部分配或依賴應用代碼實現。
任何一種方法,如果實現時以靈活性為目標之一,都可以產生一個高效內核。延遲將資源分配給應用代碼也許是為開發人員提供最大靈活性的方法,因為它為靜態,或動態分配機制留有選擇。 Micrium的-C/OS-III采用這種方法,讓應用程序開發人員決定如何最好地分配其TCB和堆棧。然而,如同Micrium的-C/OS-II中的TCB情況一樣,強制在內核中實施資源分配可以是同樣有效的方法,只要有能配置所分配資源量的方法即可。最終,應用開發人員需要一種從系統的內存空間中消除未使用資源的方法。
文件系統效率
大多數設備需要存儲數據和日志事件的選項,作為在傳送到云之前的臨時保存空間、或者是更長久地存儲在設備上。為此目的設計的任何代碼都是文件系統,無論是由開發人員編寫和測試的、還是作為RTOS方案的一部分提供。文件系統還可以提供效率選項。其范圍可從簡單(保留多少內存緩沖區)到復雜(是否支持完整的POSIX操作)。
開發人員應從其數據存儲要求開始。該數據是否在現場進行操作?或僅存儲并稍后傳送?要測量多少內容?其數據應該分開或組合嗎?在對設備實施數據采集前先行存儲數據嗎?還是將其傳送到云?存儲介質有多可靠?設計能完全免受電源故障的影響嗎?首先,一些RTOS提供類似FAT的文件系統。這包括使用標準介質格式(包括文件夾和文件) 執行I /O的代碼。一般來說,其可定制程度受限,很少能防范電源故障時的數據丟失。
另一個選擇是Datalight的RelianceEdge,它使用交易點(transactionpoint)來提供里令人興奮的是:設計的靈活性如何有助于提高效率。Reliance Edge提供存儲選項的定制。在最小用例中,稱為“文件系統要素”,不使用文件夾甚至文件名。數據存儲到編號的inode中。這些位置的計數在編譯時確定,但大小不是預先確定的。一個“文件”可以包含比其它文件更多的數據,并且僅當“文件”的總大小達到閾值時,存儲介質才裝滿。還可自由地對文件進行截取、讀取和寫入。
相比之下,FAT格式的文件系統具有專用于兩個文件分配表的介質塊。對于每個用戶數據文件,分配了文件名和元數據—前者可能相當大以支持長文件名。如果使用子文件夾,其元數據和長文件名也將占用空間。所有這些都會導致存儲介質上所收集的用戶數據可用空間變少。
對于較大的設計,Reliance Edge提供了更像POSIX的環境。這里的文件名、文件夾和文件系統元數據(如屬性以及數據和時間)是一個可配置選項。對于期望從其它設計移植POSIX接口的應用來說,這可能是個非常好的選擇。最終,文件系統要求的最終選擇與用例直接相關,這是迄今為止最有效的資源方案。
全面考量效率
除了資源使用問題之外,多年來,在購買內核、文件系統和其他軟件模塊時,效率一直是開發者關注的頭等大事。這是因為用于證明采用這種模塊的理由通常是:從頭開始編寫等效的代碼是浪費時間。換句話說,應用開發人員最有效的時間利用是編寫應用程序,而不是死磕數萬行的基礎架構代碼。
然而,正如內核和文件系統的使用本身并不能保證CPU資源的有效應用一樣,將這些模塊引入新項目的決定,也不會自動確保開發人員能最有效地使用其時間。為了真正讓開發人員專注于應用級代碼,嵌入式軟件模塊必須具有直觀的界面,并且該界面必須有詳盡文檔。在沒有有用文檔的情況下,開發人員可能要花數周的時間來解決事后證明是函數誤用導致的問題。
不幸的是,如果不能可靠地實現所描述的功能,甚至文檔編寫良好的代碼也會不必要地浪費開發時間。這就是為什么除了要求完整的文檔外,開發人員在為新項目選擇軟件時,應尋求可靠性證據—例如過去的認證或測試結果。實際上,每個軟件模塊在宣傳文獻中都是可靠的,但只有部分模塊提供了可靠證明,能保證它們“言行一致”。
例如,Datalight的Reliance Edge就有用于各種不同測試的源代碼,允許應用開發人員確認文件系統在特定開發環境中能否可靠運行。示例:開發具最高效率的IoT醫療設備什么類型的開發環境可能出現在物聯網項目中?鑒于嵌入式設備中連接需求的快速增長,不可能確定一種硬件、軟件和工具鏈的特定組合來界定這個范圍。找到完全代表物聯網可能性范圍的單一終端產品同樣具有挑戰性。盡管如此,這一領域的討論當然可以從具體的例子中受益。一種有助于說明物聯網開發者面臨的一些挑戰的產品,就是在幾年之前甚至不會被認為是種連接設備的—血糖儀。
該產品的關鍵特征之一是市場容量:血糖儀每年的產量有數百萬,并且往往以低于成本的價格出售,甚至免費贈送。因此,降低BOM成本,并最短化這些儀器開發時間的壓力很大。不過,開發這些設備并不容易。事實上,新血糖儀的功能列表可能包括彩色顯示、數據記錄功能和云連接。面對如此復雜的需求列表,負責血糖儀開發的團隊當然希望利用內核的多任務功能。優化內核的內存占用可能是該團隊的首要關注點之一,因為典型的高產量、低成本MCU往往只有有限的閃存和RAM資源。減少空間占用的關鍵步驟是刪除應用代碼不需要的任何內核資源(如TCB)。消除應用的各種內核管理任務所需的堆棧中的浪費也將會有幫助。
像Micrium的-C/Probe這樣的工具,可用于實現這一目標,其截圖如圖2所示。-C/Probe可以深入了解基于內核的應用的棧(stack)和堆(heap)的使用情況,使開發人員能夠輕松識別低效并提高效率。當實施血糖儀的數據記錄功能時,儀器的開發團隊將受益于文件系統的功能。在此,與內核一樣,使用現成的軟件模塊可以減輕團隊開發基礎架構代碼的負擔,從而有助于實現短得多、具成本效益的開發周期。處理器資源使用作為系統的總體約束之一,在開發數據記錄代碼時不可避免地需要予以考慮,因此使用高效的事務文件系統是理想情況。
圖2:FAT文件系統與Reliance Edge (資料來源:Datalight)
借助Reliance Edge等文件系統方案,開發團隊可以輕松地將服務縮減到最低限度,以便為應用程序留出盡可能多的存儲空間。
圖3:μC/Probe提供對系統數據的運行時訪問,包括內核統計信息(來源:Micrium)。
結論
雖然每個嵌入式系統都有其獨特的需求,但是適用于最大限度提高血糖儀效率的方法可以很容易地用于開發其它類設備。組件重用早已被公認為軟件開發的最佳實踐,血糖儀所需的許多基礎架構代碼(包括實時內核和文件系統)可以作為其它設備的基礎,除了替換少數底層代碼外,僅需很少改動。通過選擇質量有保證的現成的組件作為項目基礎,開發團隊可以確保自己的資源以及嵌入式硬件的有效利用,并且可以專注于編寫創新的應用代碼,使其設計在眾多的產品中脫穎而出。物聯網創新的曙光已經開始閃亮
-
嵌入式系統
+關注
關注
41文章
3587瀏覽量
129438 -
物聯網
+關注
關注
2909文章
44567瀏覽量
372828
原文標題:【技術干貨】大幅提高IoT項目效率
文章出處:【微信號:SiliconLabs,微信公眾號:Silicon Labs】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論