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