1. gzyueqian
      18529173453

      嵌入式開發(fā):優(yōu)化 RTOS 的7個(gè)技巧

      更新時(shí)間: 2022-04-05 09:30:58來(lái)源: 粵嵌教育瀏覽量:11531

        實(shí)時(shí)操作系統(tǒng) (RTOS) 正在進(jìn)入越來(lái)越多的系統(tǒng)。習(xí)慣于裸機(jī)開發(fā)或使用高度資源受限系統(tǒng)的嵌入式開發(fā)人員經(jīng)常會(huì)抱怨系統(tǒng)性能或內(nèi)存使用情況。以下是開發(fā)人員可以遵循的七個(gè)技巧,以幫助優(yōu)化其 RTOS 的性能和代碼大小。

        1. 最小化應(yīng)用程序中的任務(wù)

        將應(yīng)用程序分解為看似同時(shí)運(yùn)行的單獨(dú)任務(wù)“小程序”的能力非常有益。但是,不熟悉 RTOS 開發(fā)的開發(fā)人員有時(shí)可能會(huì)有點(diǎn)過分熱心并創(chuàng)建比應(yīng)用程序所需的任務(wù)更多的任務(wù)。一些額外的任務(wù)有什么害處?在應(yīng)用程序中創(chuàng)建的每個(gè)任務(wù)都需要?jiǎng)?chuàng)建任務(wù)控制塊 (TCB) 來(lái)管理任務(wù)。TCB 包含至少幾十個(gè)用于跟蹤任務(wù)的不同變量。(此處可以看到來(lái)自 uCOS/III 的 TCB 示例。)可以想象,TCB 不會(huì)使用大量?jī)?nèi)存,但隨著越來(lái)越多的任務(wù)添加,內(nèi)存使用會(huì)迅速膨脹。出于這個(gè)原因,希望盡量減少使用多少代碼空間的開發(fā)人員應(yīng)該盡量減少應(yīng)用程序中的任務(wù)數(shù)量。

        2. 使用內(nèi)存塊池而不是字節(jié)池

        內(nèi)存字節(jié)池本質(zhì)上是一個(gè)堆。開發(fā)人員可以在程序執(zhí)行期間動(dòng)態(tài)請(qǐng)求內(nèi)存,就像他們使用 malloc 一樣。在許多情況下,使用堆或字節(jié)池會(huì)導(dǎo)致影響實(shí)時(shí)系統(tǒng)性能的不確定行為。為了確保系統(tǒng)及時(shí)運(yùn)行,嵌入式開發(fā)人員可以使用塊池來(lái)代替,它以一種確定的方式運(yùn)行,并且也不存在碎片問題。

        3. 不要?jiǎng)?chuàng)建和銷毀對(duì)象

        創(chuàng)建任務(wù)、信號(hào)量、消息隊(duì)列和其他 RTOS 對(duì)象通常會(huì)導(dǎo)致動(dòng)態(tài)分配內(nèi)存。創(chuàng)建和銷毀 RTOS 對(duì)象將使用 malloc 和 free,這又是不確定的,可能會(huì)導(dǎo)致性能問題。與創(chuàng)建和銷毀對(duì)象相關(guān)的開銷,特別是如果經(jīng)常這樣做,可能會(huì)成為系統(tǒng)障礙,更不用說(shuō)它如何增加代碼復(fù)雜性并使程序難以遵循。在可能的情況下,在應(yīng)用程序初始化期間分配所有對(duì)象,并讓它們?cè)趹?yīng)用程序的整個(gè)生命周期中持續(xù)存在。這樣,對(duì)象的行為就好像它們是靜態(tài)分配的,而不是動(dòng)態(tài)分配的。



        4.考慮使用事件標(biāo)志

        事件標(biāo)志可用于同步任務(wù),類似于使用信號(hào)量同步任務(wù)的方式。從性能角度比較事件標(biāo)志和信號(hào)量時(shí),事件標(biāo)志通常使用更少的內(nèi)存并且執(zhí)行得更快。嵌入式開發(fā)人員應(yīng)考慮比較其 RTOS 的內(nèi)存占用和執(zhí)行時(shí)間,以確定他們可以從應(yīng)用程序中擠出幾個(gè)額外字節(jié)或微秒的位置。

        5. 最小化 RTOS 對(duì)象

        大多數(shù) RTOS 對(duì)象都需要一個(gè)控制塊。應(yīng)用程序中的任務(wù)、信號(hào)量、消息隊(duì)列等越多,內(nèi)存使用量就越大。通過限制在運(yùn)行時(shí)創(chuàng)建的 RTOS 對(duì)象的數(shù)量,可以最大限度地減少內(nèi)存使用。

        6.優(yōu)化任務(wù)棧

        任務(wù)堆棧因在應(yīng)用程序中消耗最多的內(nèi)存而臭名昭著。許多開發(fā)人員只是猜測(cè)一個(gè)值而不是進(jìn)行測(cè)量。許多 RTOS 會(huì)建議任務(wù)的默認(rèn)堆棧大小約為 1 kB。是不是太多了? 太少了? 如果不進(jìn)行測(cè)量,就無(wú)法判斷,因此開發(fā)人員只會(huì)猜測(cè)。結(jié)果是為堆棧空間分配了太多內(nèi)存并浪費(fèi)了。開發(fā)人員應(yīng)利用與 RTOS 相關(guān)的堆棧監(jiān)控功能來(lái)確定其最小、最大和平均堆棧使用情況。從最大值開始,額外增加 25% 將是確定堆棧大小的安全經(jīng)驗(yàn)法則。

        7.關(guān)閉未使用的功能

        RTOS 是極其豐富和復(fù)雜的軟件系統(tǒng)。它們包含許多并非每個(gè)應(yīng)用程序或開發(fā)人員都可以使用的功能。熟悉 RTOSes 配置文件對(duì)于最小化內(nèi)存使用和代碼大小非常有幫助。配置文件允許開發(fā)人員啟用和禁用功能。

        使用 RTOS 不一定需要增強(qiáng)型微控制器或大量?jī)?nèi)存。嵌入式開發(fā)人員構(gòu)建和使用他們的 RTOS 的方式可以決定它是在資源受限的環(huán)境中運(yùn)行良好還是被標(biāo)記為膨脹代碼。這七個(gè)技巧只是幫助你開始優(yōu)化 RTOS 的一些技巧。


      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 在线免费观看h片 | 亚洲成A∨人影院在线欢看 午夜精品视频在线 | 亚洲国产aⅴ精品一区二区久久 | 日本强伦姧护士在线播放 | 性做久久久久久久久 | 亚洲国产精品一区二区久久 |