經(jīng)常從嵌入式開發(fā)人員那里聽到兩種拒絕使用RTOS的借口:
RTOS內(nèi)存占用太大
RTOS開銷太大
這些借口在以前可能有一些價(jià)值,但今天它們沒有任何分量。典型的RTOS對(duì)CPU的負(fù)載不到4%,需要不到16 KB的閃存空間和不到4 KB的RAM。在大多數(shù)情況下,性能和內(nèi)存問題與開發(fā)人員如何使用RTOS以及他們?cè)谌绾握_使用和配置RTOS方面的知識(shí)差距有關(guān)。下面是開發(fā)人員可以遵循的七個(gè)技巧,以優(yōu)化他們的RTOS應(yīng)用程序內(nèi)存使用。
技巧1 – 對(duì)每項(xiàng)任務(wù)進(jìn)行最壞情況堆棧分析
最大的內(nèi)存浪費(fèi)之一是為任務(wù)堆棧分配的內(nèi)存。默認(rèn)情況下,大多數(shù) RTOS 將分配一千字節(jié)來(lái)保存任務(wù)堆棧,其中包含諸如局部變量、數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用返回地址等內(nèi)容。默認(rèn)大小的問題在于,不熟悉使用 RTOS 的開發(fā)人員通常不會(huì)檢查每個(gè)任務(wù)并正確調(diào)整堆棧的大小。一個(gè)只閃爍幾個(gè) LED 并且什么都不做的任務(wù)通常會(huì)有 1 千字節(jié)的堆棧,即使 64 字節(jié)就足夠了。未能檢查每個(gè)任務(wù)并正確調(diào)整堆棧大小可能會(huì)導(dǎo)致使用的 RAM 遠(yuǎn)遠(yuǎn)超過應(yīng)用程序?qū)嶋H所需的 RAM。
技巧2 – 避免過度使用堆棧
由于每個(gè)任務(wù)都有一個(gè)堆棧,因此任務(wù)堆棧成為運(yùn)行應(yīng)用程序所需的 RAM 的巨大貢獻(xiàn)者。當(dāng)嵌入式開發(fā)人員設(shè)計(jì)和實(shí)現(xiàn)他們的任務(wù)時(shí),他們應(yīng)該盡量減少堆棧的使用。這可以通過以下方式完成:
? 避免遞歸函數(shù)
? 最大限度減少函數(shù)調(diào)用
? 避免大型本地?cái)?shù)據(jù)結(jié)構(gòu)
開發(fā)人員不僅需要編寫代碼,還需要仔細(xì)考慮每個(gè)變量、數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用對(duì)內(nèi)存和性能的影響。避免過度使用堆棧使用將允許開發(fā)人員縮小堆棧大小并節(jié)省 RAM 使用。
技巧3 – 使用內(nèi)存塊池
開發(fā)人員在開發(fā)基于 RTOS 的應(yīng)用程序時(shí)經(jīng)常會(huì)遇到的一個(gè)大問題是他們需要?jiǎng)討B(tài)分配內(nèi)存。動(dòng)態(tài)內(nèi)存分配的問題在于,內(nèi)存通常是從一個(gè)行為類似于字節(jié)池的堆中分配的。堆和字節(jié)池有許多缺點(diǎn),例如:
? 它們會(huì)破碎
? 內(nèi)存分配是不確定的
另一方面,塊池來(lái)自固定塊,不僅可以確定地分配,而且不會(huì)碎片。對(duì)于需要?jiǎng)討B(tài)分配內(nèi)存的開發(fā)人員來(lái)說(shuō),塊池是比堆或字節(jié)池更好的選擇。
技巧4 – 最小化 RTOS 對(duì)象
RTOS 可以幫助嵌入式開發(fā)人員將他們的應(yīng)用程序分解為可重用的半獨(dú)立程序,這些程序使用信號(hào)量、互斥體和消息隊(duì)列等 RTOS 對(duì)象來(lái)通信和同步任務(wù)執(zhí)行。每個(gè)RTOS對(duì)象都有一個(gè)使用少量?jī)?nèi)存的控制塊。在資源非常有限的應(yīng)用程序中,或者如果開發(fā)人員過度使用這些資源,則可以使用比實(shí)際需要更多的內(nèi)存。出于這個(gè)原因,開發(fā)人員應(yīng)該仔細(xì)設(shè)計(jì)他們的 RTOS 應(yīng)用程序,盡量減少RTOS對(duì)象的使用。
技巧5 – 考慮使用事件標(biāo)志而不是信號(hào)量
RTOS 的功能可能因一個(gè) RTOS 而異,但在作者使用的幾種不同的 RTOS 中,使用事件標(biāo)志而不是信號(hào)量可能會(huì)導(dǎo)致占用空間略小。信號(hào)量不僅包含一個(gè)控制塊,還包含一些基本代碼來(lái)執(zhí)行信號(hào)量操作,比如發(fā)送和接收信號(hào)量。通常,此代碼往往比事件標(biāo)志更慢并且使用更多內(nèi)存。事件標(biāo)志實(shí)際上只不過是一個(gè)內(nèi)存位置,其中內(nèi)存位置中的每一位都代表一個(gè)事件,例如按下按鈕或剛剛對(duì)溫度傳感器進(jìn)行采樣。
技巧6 – 最小化任務(wù)優(yōu)先級(jí)
實(shí)時(shí)操作系統(tǒng)允許嵌入式開發(fā)人員設(shè)置任務(wù)可以設(shè)置的優(yōu)先級(jí)。例如,許多系統(tǒng)的默認(rèn)值是 0 到 31。在某些情況下,默認(rèn)值的范圍可以從 0 到 128 甚至 0 到 1024。一般來(lái)說(shuō),一般來(lái)說(shuō),任務(wù)優(yōu)先級(jí)越低,性能越好,內(nèi)存使用越少。開發(fā)人員應(yīng)盡量將優(yōu)先級(jí)設(shè)置保持在 0 到 31 之間,除非有充分的理由進(jìn)行其他設(shè)置。
技巧7 – 優(yōu)化 RTOS 配置文件
RTOS 通常有一個(gè)配置文件,允許開發(fā)人員微調(diào) RTOS 行為。配置文件允許開發(fā)人員設(shè)置功能,例如默認(rèn)堆棧大小、可用的優(yōu)先級(jí)數(shù)量以及構(gòu)建中將包含哪些同步對(duì)象。在許多情況下,修改配置文件可以為開發(fā)人員提供更小的 RTOS 占用空間,甚至根據(jù)可用的配置選項(xiàng)提高性能。確保檢查 RTOS 配置文件并了解每個(gè)可用選項(xiàng)。
結(jié)論
如果使用不當(dāng),RTOS 會(huì)導(dǎo)致應(yīng)用程序所需的內(nèi)存占用膨脹到無(wú)法使用的水平。在許多情況下,高內(nèi)存使用是由于開發(fā)人員使用 RTOS 的方式造成的,而不是 RTOS 本身的指示。在這篇文章中,我們研究了嵌入式開發(fā)人員可以遵循的幾個(gè)技巧,以幫助最小化他們自己的 RTOS 應(yīng)用程序占用空間。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)