對于仔細(xì)閱讀最新微控制器數(shù)據(jù)表的開發(fā)人員來說,很容易假設(shè) CPU 資源的有效使用,包括內(nèi)存和時鐘周期,至多是當(dāng)今硬件的一個次要問題。對于嵌入式開發(fā)人員來說,現(xiàn)在可能比以往任何時候都更重要的是確保他們的軟件以最高效率運行并且他們自己的時間以一種有效的方式度過。
在現(xiàn)代嵌入式系統(tǒng)上運行的軟件往往來自多種來源。應(yīng)用程序開發(fā)人員編寫的代碼通常與來自 RTOS(實時操作系統(tǒng))提供商的現(xiàn)成軟件組件相結(jié)合,而這些組件又可能利用最初由半導(dǎo)體公司提供的驅(qū)動程序代碼。可以編寫每段代碼來優(yōu)化效率,但本文將重點關(guān)注現(xiàn)成軟件組件的效率。特別是兩個組件將作為此處給出的資源效率檢查的基礎(chǔ):實時內(nèi)核和事務(wù)文件系統(tǒng)。
實時內(nèi)核:高效系統(tǒng)的核心
實時內(nèi)核是當(dāng)今許多嵌入式系統(tǒng)中運行的軟件的核心。簡單來說,內(nèi)核就是一個調(diào)度器;為基于內(nèi)核的系統(tǒng)編寫應(yīng)用程序代碼的開發(fā)人員將該代碼劃分為任務(wù),內(nèi)核負(fù)責(zé)調(diào)度任務(wù)。因此,內(nèi)核是 main() 中無限循環(huán)的替代方案,它通常用作裸機嵌入式系統(tǒng)中的主要調(diào)度機制。
使用實時內(nèi)核可以帶來很多好處,包括提高效率。選擇將應(yīng)用程序代碼基于內(nèi)核的嵌入式開發(fā)人員可以優(yōu)化系統(tǒng)中處理器資源的使用,同時更有效地利用自己的時間。然而,并非所有的內(nèi)核都是平等的,并且由于簡單地決定為新項目采用內(nèi)核而不能保證效率增益。
內(nèi)核可能不同以及 CPU 資源可以以不同程度的效率使用的關(guān)鍵領(lǐng)域是調(diào)度。通過提供允許任務(wù)響應(yīng)事件運行的智能調(diào)度機制,內(nèi)核幫助開發(fā)人員在無限循環(huán)中實現(xiàn)效率提升,其中任務(wù)(或函數(shù))以固定順序執(zhí)行。基于內(nèi)核的應(yīng)用程序的確切效率部分取決于其調(diào)度程序的實現(xiàn)方式。內(nèi)核的調(diào)度程序——它只是一段代碼,負(fù)責(zé)決定何時運行每個任務(wù)——最終是開銷,并且這種開銷不能抵消通過遠(yuǎn)離裸機系統(tǒng)可以獲得的好處。
內(nèi)核可以采用兩種方法來分配多任務(wù)所需的基本資源:分配這些資源的責(zé)任可以留給應(yīng)用程序代碼,或者內(nèi)核本身可以處理分配。 在任何內(nèi)核中都不可避免地存在某些變量和數(shù)據(jù)結(jié)構(gòu),因為它們對于多任務(wù)服務(wù)的實現(xiàn)至關(guān)重要,它們完全位于內(nèi)核的范圍內(nèi)。 但是,對于用于記錄每個任務(wù)狀態(tài)的 TCB(或任務(wù)控制塊)等數(shù)據(jù)結(jié)構(gòu),甚至對于在上下文切換期間存儲 CPU 寄存器值的堆棧,內(nèi)核提供者可以選擇內(nèi)部分配或依賴應(yīng)用程序代碼。
文件系統(tǒng)效率
大多數(shù)設(shè)備需要存儲數(shù)據(jù)和記錄事件的選項,或者作為傳輸?shù)皆浦暗呐R時休息場所,或者更永久地存儲在設(shè)備上。任何為此目的設(shè)計的代碼都是文件系統(tǒng),無論是由嵌入式開發(fā)人員編寫和測試,還是作為 RTOS 解決方案的一部分提供。文件系統(tǒng)還可以提供提高效率的選項。這些范圍從簡單(要保留多少內(nèi)存緩沖區(qū))到復(fù)雜(是否支持完整的 POSIX 操作)。
首先,一些 RTOS 提供類似 FAT 的文件系統(tǒng)。這包括使用標(biāo)準(zhǔn)媒體格式(包括文件夾和文件)執(zhí)行 I/O 的代碼。通常,這不是非常可定制的,而且它很少能防止電源故障期間的數(shù)據(jù)丟失。另一種選擇是 Datalight 的 Reliance Edge,它使用事務(wù)點來提供電源故障安全環(huán)境。這里令人興奮的是設(shè)計的靈活性如何提高效率。
Reliance Edge 提供存儲選項的自定義。 在被稱為“文件系統(tǒng)要點”的最小用例中,不使用文件夾甚至文件名。 數(shù)據(jù)存儲在編號的 inode 中。 這些位置的數(shù)量是在編譯時確定的,但大小不是預(yù)先確定的。 一個“文件”可以包含比其他“文件”更多的數(shù)據(jù),并且僅當(dāng)“文件”的總大小達(dá)到閾值時媒體才滿。 文件也可以自由截斷、讀取和寫入。
除了資源使用問題之外,效率多年來一直是開發(fā)人員購買內(nèi)核、文件系統(tǒng)和其他軟件模塊的首要考慮因素。 這是因為用于證明采用此類模塊的理由通常是從頭開始編寫等效代碼將浪費時間。 換句話說,應(yīng)用程序開發(fā)人員的時間最有效地用于編寫應(yīng)用程序,而不是花費數(shù)萬行基礎(chǔ)設(shè)施代碼。
通過選擇優(yōu)質(zhì)的現(xiàn)成組件作為其項目的基礎(chǔ),嵌入式開發(fā)團(tuán)隊可以確保有效利用自己的資源以及嵌入式硬件的資源,并可以專注于編寫創(chuàng)新的應(yīng)用程序代碼以使他們的工作站穩(wěn)腳跟。