chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FreeRTOS如何減少RAM占用空間并加快執(zhí)行速度?

工程師 ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-10-14 14:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

之前分享了《FreeRTOS V10.4.0更新了哪些功能?》,今天就來詳細(xì)講述其中的一個知識點:FreeRTOS的直接任務(wù)(消息)通知,這樣做的目的就是減少RAM占用空間并加快執(zhí)行速度。

一、寫在前面

幾乎所有RTOS操作系統(tǒng)都提供了隊列和信號量的功能,對于大部分新手來說,使用隊列和信號量是必備技能。

但是,在大多數(shù)情況下,他們都是使用“中介對象”進(jìn)行通信,而并非“直接任務(wù)消息”通信。

通過“中介對象”進(jìn)行通信,每一組隊列或信號量都會分配一段內(nèi)存(消息緩沖區(qū)和流緩沖區(qū))。就存在一個問題,如果隊列或信號量比較多,勢必造成更大的內(nèi)存開支。

但是,如果通過本文說的“直接消息”通信,會節(jié)約很多內(nèi)存。

二、什么是直接任務(wù)通知?

大多數(shù)任務(wù)間通信方法都通過中介對象,例如隊列,信號量或事件組。發(fā)送任務(wù)寫入通信對象,接收任務(wù)從通信對象讀取。

比如FreeRTOS的隊列通信,首先創(chuàng)建隊列之前要定義一個隊列:

QueueHandle_t xQueue;xQueue = xQueueCreate(10, sizeof( /* 長度 */ ) );

而這個隊列包含了很多中介對象:

大家可以算一下這個“中介對象”會占用多少RAM空間?

通過一個代碼示意圖理解中介對象通信:

直接任務(wù)通知:

當(dāng)使用直接任務(wù)通知時,顧名思義,發(fā)送任務(wù)將通知直接發(fā)送給接收任務(wù),而無需中介對象。

通過一個代碼示意圖理解:

從FreeRTOS V10.4.0開始,每個任務(wù)都有一系列通知。每個通知都包含一個32位值和一個布爾狀態(tài),它們一起僅消耗5個字節(jié)的RAM。

就像任務(wù)可以阻止二進(jìn)制信號量等待該信號量變?yōu)椤翱捎谩币粯樱蝿?wù)可以阻止通知以等待該通知的狀態(tài)變?yōu)椤按幚怼?。同樣,就像任?wù)可以阻止計數(shù)信號量以等待該信號量的計數(shù)變?yōu)榉橇阋粯樱蝿?wù)可以阻止通知以等待該通知的值變?yōu)榉橇?。下面的第一個示例演示了這種情況。

通知不僅可以傳達(dá)事件,還可以通過多種方式傳達(dá)數(shù)據(jù)。

三、進(jìn)一步分析直接任務(wù)通知

通過對比FreeRTOS V10.4.0和之前版本,你會發(fā)現(xiàn)V10.4.0多了一些API,比如ulTaskNotifyTake / ulTaskNotifyTakeIndexed:

在官網(wǎng)也有針對這些API的詳細(xì)介紹和說明,以及應(yīng)用代碼例子:

直接任務(wù)通信API說明地址:

https://www.freertos.org/RTOS-task-notification-API.html

(公號不支持外鏈接,請復(fù)制鏈接到瀏覽器打開)

四、使用直接任務(wù)通知性能優(yōu)勢和使用限制

任務(wù)通知的靈活性使它們可以在需要創(chuàng)建單獨的隊列、 二進(jìn)制信號量、 數(shù)信號量或事件組的情況下使用。

與使用中介對象(例如信號量)來取消阻止任務(wù)相比,使用直接通知取消阻止RTOS任務(wù)的速度快了45% (來自官方數(shù)據(jù)) ,并且使用的RAM更少。

當(dāng)然,有這些性能優(yōu)勢,也肯定一些限制:

僅當(dāng)只有一個任務(wù)可以作為事件的接收者時,才可以使用RTOS任務(wù)通知。但是,在大多數(shù)實際使用情況下都可以滿足此條件,例如中斷使執(zhí)行任務(wù)處理的任務(wù)中斷時,該任務(wù)將處理該中斷接收的數(shù)據(jù)。

僅在使用RTOS任務(wù)通知代替隊列的情況下:接收任務(wù)可以在“阻塞”狀態(tài)下等待通知(因此不占用任何CPU時間),而發(fā)送任務(wù)不能在“阻塞”狀態(tài)下等待消息。如果發(fā)送無法立即完成,則發(fā)送完成。

五、使用方法

使用方法其實很簡單,只要你會使用RTOS的隊列、信號量,基本看一眼官方例子就能使用。

我這里也拿官方例子說明一下:

/* main() 創(chuàng)建的兩個任務(wù)的原型 */static void prvTask1( void *pvParameters );static void prvTask2( void *pvParameters );/* 處理由main() 創(chuàng)建的任務(wù)的句柄 */static TaskHandle_t xTask1 = NULL, xTask2 = NULL;/* 創(chuàng)建兩個任務(wù),來回發(fā)送通知,然后啟動RTOS調(diào)度程序 */void main( void ){ xTaskCreate( prvTask1, “Task1”, 200, NULL, tskIDLE_PRIORITY, &xTask1 ); xTaskCreate( prvTask2, “Task2”, 200, NULL, tskIDLE_PRIORITY, &xTask2 ); vTaskStartScheduler();}/*———————————————————–*//* prvTask1() 使用API的“索引”版本 */static void prvTask1( void *pvParameters ){ for( ;; ) { /* 發(fā)送通知到prvTask2() ,使其脫離“已阻止”狀態(tài)。*/ xTaskNotifyGiveIndexed( xTask2, 0 ); /* 阻止等待prvTask2() 通知此任務(wù) */ ulTaskNotifyTakeIndexed( 0, pdTRUE, portMAX_DELAY ); }}/*———————————————————–*//* prvTask2()使用API的原始版本(不帶“索引”) */static void prvTask2( void *pvParameters ){ for( ;; ) { /* 等待prvTask1()通知此任務(wù) */ ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); /* 向prvTask1()發(fā)送通知,使它退出“已阻止”狀態(tài) */ xTaskNotifyGive( xTask1 ); }}

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1396

    瀏覽量

    119232
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1927

    瀏覽量

    65522
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    856

    瀏覽量

    122187
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【CW32】uart_obj_fw 輕量級串口框架

    輕量級跨平臺串口通信框架,專為資源受限的嵌入式設(shè)備設(shè)計。單個對象RAM占用最小68字節(jié)左右(不算緩沖區(qū)),ROM占用1-2k字節(jié)左右,功能支持裁剪,資源占用小并不代表低性能,該庫參考
    的頭像 發(fā)表于 09-29 18:02 ?7199次閱讀

    如何降低視頻占用空間

    我發(fā)現(xiàn)不同分辨率圖像保存的視頻大小接近,1分鐘的視頻都是30MB,如下圖 我最終目的是希望保存視頻占用空間小一點,同時我也沒有找到降低幀率的方法,目前只能使用默認(rèn)的30幀
    發(fā)表于 08-14 06:25

    TLE9893 怎么將代碼放在ram中運行?

    如題,我希望將我的中斷回調(diào)函數(shù)放進(jìn)ram中運行以保證他的運行速度更快。那么我該怎么修改程序才能做到呢?或者有沒有相關(guān)的例程給我參考一下。
    發(fā)表于 07-14 08:00

    TRCX應(yīng)用:顯示面板電容指紋分析

    在大尺寸面板上掃描指紋是捕捉指紋上脊谷間的電容差異。為了加快計算執(zhí)行速度,通過分布式計算對仿真區(qū)域進(jìn)行劃分,自動合并為包含指紋信息的結(jié)果。工程師可以通過快速精確的仿真算法,根據(jù)布局結(jié)果分析電勢分布和電容輪廓。 分割模擬區(qū)域
    發(fā)表于 06-17 08:54

    瑞薩RA-T系列芯片馬達(dá)類工程TCM加速化設(shè)置(上)提高電流環(huán)執(zhí)行速度

    本篇介紹在使用 RA8-T系列芯片 ,建立 馬 達(dá)類工程應(yīng)用 時,如何將 電 流環(huán)部分的指令和變量 設(shè)置到 TCM單元 ,以提高電流環(huán)執(zhí)行速度,從而提高系統(tǒng)整體的運行性能,在伺服和高端工業(yè)領(lǐng)域有很高
    的頭像 發(fā)表于 06-04 18:02 ?894次閱讀
    瑞薩RA-T系列芯片馬達(dá)類工程TCM加速化設(shè)置(上)提高電流環(huán)<b class='flag-5'>執(zhí)行速度</b>

    詳解FreeRTOS與SAFERTOS的區(qū)別

    開源免費的FreeRTOS由Richard Barry在WHIS工作時創(chuàng)建,WHIS基于FreeRTOS的功能模型,通過完整的HAZOP分析,確定了功能模型和API中的所有的弱點,減輕所有薄弱環(huán)節(jié),采用IEC 61508 SI
    的頭像 發(fā)表于 06-04 16:58 ?564次閱讀
    詳解<b class='flag-5'>FreeRTOS</b>與SAFERTOS的區(qū)別

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化一

    出現(xiàn)崩潰和卡頓的情況。因此,主動減少應(yīng)用內(nèi)存的占用對于整個系統(tǒng)至關(guān)重要。通過減少應(yīng)用內(nèi)存的占用,可以有效提高應(yīng)用的性能和響應(yīng)速度,節(jié)省系統(tǒng)資
    發(fā)表于 05-21 11:27

    RVCT編譯器是否比GNU的編譯器的代碼執(zhí)行速度更快?

    ,是rvct3.1還是rvct4.0?如何把rvct編譯器集成到ide中? 2、RVCT編譯器是否比GNU的編譯器的代碼執(zhí)行速度更快?
    發(fā)表于 05-08 07:49

    如何提高弧光保護(hù)裝置的動作速度?

    ,提高故障判斷的速度和準(zhǔn)確性。 提升硬件性能:選用響應(yīng)速度更快的弧光傳感器,確保能迅速感知弧光的產(chǎn)生輸出信號;同時,配備高性能的主控單元和通信模塊,加快信號處理和傳輸
    發(fā)表于 05-06 10:09

    S32K116不能使用全部RAM怎么解決?

    &#039;m_data_2&#039; 溢出 0 字節(jié) 當(dāng)它是 8192 時,RAM 只使用了將近 9 KB,小于總 RAM 空間 16kB,為什么會提醒錯誤,如何解決?
    發(fā)表于 03-26 07:26

    如何優(yōu)化RAM內(nèi)存使用

    :使用任務(wù)管理器查看當(dāng)前運行的程序和服務(wù),關(guān)閉那些不需要的。 禁用啟動程序 :減少開機(jī)啟動項,只保留必要的程序。 2. 優(yōu)化操作系統(tǒng)設(shè)置 調(diào)整虛擬內(nèi)存 :合理設(shè)置虛擬內(nèi)存,避免過多占用硬盤空間。 清理磁盤 :定期進(jìn)行磁盤清理,
    的頭像 發(fā)表于 11-11 09:58 ?2204次閱讀

    RAM內(nèi)存頻率對性能的影響

    在計算機(jī)系統(tǒng)中,RAM(隨機(jī)存取存儲器)是至關(guān)重要的組件之一,它直接影響著系統(tǒng)的響應(yīng)速度和處理能力。內(nèi)存頻率,即內(nèi)存的運行速度,是衡量RAM性能的一個重要指標(biāo)。 1. 內(nèi)存頻率的定義
    的頭像 發(fā)表于 11-11 09:52 ?7474次閱讀

    什么是RAM內(nèi)存 RAM內(nèi)存對電腦性能的影響

    所有存儲的數(shù)據(jù)。RAM的主要作用是提供快速的數(shù)據(jù)訪問,以便CPU(中央處理器)能夠高效地執(zhí)行程序和處理任務(wù)。 RAM內(nèi)存對電腦性能的影響 RAM對電腦性能的影響是顯著的,以下是幾個關(guān)鍵
    的頭像 發(fā)表于 11-11 09:38 ?7670次閱讀

    制造業(yè)使用數(shù)字孿生來提高效率減少排放

    將工業(yè)生產(chǎn)的碳足跡減少 1%,每年就能減少 9000 萬噸二氧化碳排放,這相當(dāng)于每年減少 2000 多萬輛汽油車上路。 借助數(shù)字孿生和加速計算等技術(shù),制造商能夠減少排放、提高能效
    的頭像 發(fā)表于 11-08 11:19 ?1054次閱讀

    如何在KEIL軟件中將變量定義在特定的RAM空間

    _____________________________________________________________如何在KEIL軟件中將變量定義在特定的RAM空間
    發(fā)表于 10-16 22:47