色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

freeRTOS源碼中內存管理的方案

汽車電子技術 ? 來源:嵌入式之入坑筆記 ? 作者: 嵌入式之入坑筆記 ? 2023-02-10 11:11 ? 次閱讀

freeRTOS源碼中提供了五種內存管理的方案,可以說是很方便了。實際需要使用哪一種,可以根據自己項目的需要進行選擇,都是可以的。

那這五種不同的內存管理方式都有哪些差異呢?按照官方給出的說明,這五種內存管理的特點分別如下:

1、內存管理方式 1(heap_1.c)

heap_1 動態內存管理方式是五種動態內存管理方式中最簡單的,這種方式的動態內存管理一旦申請 了相應內存后,是不允許被釋放的。

盡管如此,這種方式的動態內存管理還是可以滿足許多的嵌入式項目的, 因為有些嵌入式產品在系統啟動階段就明確了任務創建、事件標志組、信號量、消息隊列等資源的使用情況, 而且這些資源是整個運行過程中都要一直使用的,并不打算釋放或者丟棄,所以也就不需要釋放內存。

FreeRTOS 的 動態內存可以申請的大小范圍可以在 FreeRTOSConfig.h 文件中進行了定義:

#define configTOTAL_HEAP_SIZE   ( ( size_t ) ( 30 * 1024 ) ) //單位字節

這個宏其實是規定了操作系統的堆棧空間的總大小,動態申請的內存大小是不能操作這個這個值的。

我們可以通過函數 xPortGetFreeHeapSize 就能獲得 FreeRTOS 動態內存的剩余情況,進而可以根據剩余情況優化 動態內存的大小。

heap_1 方式的動態內存管理有以下特點:

1)項目不需要刪除任務、信號量、消息隊列等已經創建的資源。

2)所申請的動態內存的時間是固定的,并且不會產生內存碎片。

3)是一種靜態內存分配方案,因為申請的內存是不會被釋放掉。

2、內存管理方式 2(heap_2.c)

heap_2 動態內存管理利用了自適應算法,并且支持內存釋放, 但是不支持內存碎片整理。

FreeRTOS 的 動態內存可以申請的大小范圍可以在 FreeRTOSConfig.h 文件中進行了定義:

#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) ) //單位字節

通過函數 xPortGetFreeHeapSize 能獲得 FreeRTOS 動態內存的剩余,可以根據剩余情況優化動態內存的大小。

heap_2 方 式的內存管理有以下特點:

1)在不考慮內存碎片的情況下,這種方式支持重復的任務、信號量、事件標志組、軟件定時器等內部資源 的創建和刪除。因為不使用的資源是支持釋放的,所以可以讓內存資源得到反復的使用!

2)如果申請和釋放的動態內存大小是隨機的,不建議采用這種動態內存管理方式。

3)項目中需要重復的創建和刪除任務,如果每次創建需要動態內存大小相同,那么 heap_2 比 較適合,但每次創建需要動態內存大小不同,那么方式 heap_2 就不合適了,因為容易產生內存 碎片,內存碎片過多的話會導致無法申請出一個大的內存塊出來。

4)項目中需要重復的創建和刪除消息隊列,也會出現類似上面的情況。

5)直接的調用函數 pvPortMalloc() 和 vPortFree() 也容易出現內存碎片。如果按一定順序的申請和釋放,基本沒有內存碎片的,而不按順序的隨機申請和釋放容易產生內存碎片。

6)如果隨機的創建和刪除任務、消息隊列、事件標志組、信號量等內部資源也容易出現內存碎片。

3、 內存管理方式 3(heap_3.c)

這種方式實現的內存管理是對編譯器提供的 malloc 和 free 函數進行了封裝,保證是線程安全的。

FreeRTOS 的動態內存大小在 FreeRTOSConfig.h 文件中進行了定義:

#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) ) //單位字節

heap_3 方式的內存管理有以下特點:

1)需要編譯器提供 malloc 和 free 函數。

2)不具有時間確定性,即申請動態內存的時間不是固定的。

3)增加 RTOS 內核的代碼量。

另外要特別注意一點,這種方式的動態內存申請和釋放不是用的 FreeRTOSConfig.h 文件中定義的heap空間大小,而是用的編譯器設置的heap空間大小。

4、內存管理方式 4(heap_4.c)

heap_4 動態內存管理利用了最適應算法,且支持內存碎片的回 收并將其整理為一個大的內存塊。

FreeRTOS 的動態內存大小在 FreeRTOSConfig.h 文件中進行了定義:

#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) ) //單位字節

heap_4 同時支持將動態內存設置在指定的 RAM 空間位置。

通過函數 xPortGetFreeHeapSize 就能獲得 FreeRTOS 動態內存的剩余。

使用函數 xPortGetMinimumEverFreeHeapSize 能夠獲取從系統啟 動到當前時刻的動態內存最小剩余。

heap_4 方式的 內存管理有以下特點:

1)可以用于需要重復的創建和刪除任務、信號量、事件標志組、軟件定時器等資源的項目中。

2)調用 pvPortMalloc() 和 vPortFree(),即使每次申請的內存大小都不同,也不會產 生很多的內存碎片。

3)申請動態內存的時間不是確定的。

5、 內存管理方式 5 (heap_5.c)

如果希望申請的空間可以采用不連續的內存區,比希望可以將內存定義在內部 SRAM 中的某一部分,或者外部 SRAM 的一部分,就可以采用 heap_5 動態內存管理 方式。

heap_5 內存管理通過函數 vPortDefineHeapRegions 進行初始化的,即在創建任 務 FreeRTOS 的內部資源前要優先調用這個函數 vPortDefineHeapRegions,否則是無法通過函數 pvPortMalloc 申請到動態內存的。

6、這五種內存申請方式的比較

有關五種動態內存管理方式簡單總結如下:

1)heap_1.c:五種方式里面最簡單的,但是申請的內存不允許釋放。

2)heap_2.c:支持動態內存的申請和釋放,但是不支持內存碎片的處理,無法將碎片內存合并成一個大的內存塊。

3)heap_3.c:將編譯器自帶的 malloc 和 free 函數進行簡單的封裝,以支持線程安全,即支持多任務調 用。

4)heap_4.c:支持動態內存的申請和釋放,支持內存碎片處理,支持將動態內存設置在個固定的地址(內部或者外部 RAM)。

5)heap_5.c:在 heap_4.c 的基礎上支持將動態內存設置在不連續的區域上。

其實大多數項目中使用的都是 heap_4.c 這種內存的管理方式,這種方式支持動態內存的申請和釋放,支持內存碎片處理,還支持將動態內存設置在個固定的地址,對大多數的項目都有很高的滿足性,基本上都能夠適配上了!

五種方式不分優劣吧,看自己的項目的需求,合適才是最好的!!!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    652

    瀏覽量

    29358
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62321
  • 內存管理
    +關注

    關注

    0

    文章

    168

    瀏覽量

    14165
收藏 人收藏

    評論

    相關推薦

    freeRTOS 源碼

    FreeRTOS是一個迷你操作系統內核的小型嵌入式系統。作為一個輕量級的操作系統,功能包括:任務管理、時間管理、信號量、消息隊列、內存管理
    發表于 01-07 16:38

    第28章 FreeRTOS動態內存管理

    28.4 實驗例程說明28.5總結28.1動態內存管理介紹 FreeRTOS支持5種動態內存管理方案
    發表于 09-11 07:15

    FreeRTOS內存管理的算法解析?

    關于FreeRTOS內存管理,有人測試過它給定的算法么?會不會有內存碎片的出現,如果產品一直運行,會不會出現內存崩潰的情況。求證啊。目前用h
    發表于 07-30 11:39

    闡述FreeRTOS系統的機制及在應用的優缺點

    FreeRTOS是一個源碼公開的免費的嵌入式實時操作系統,通過研究其內核可以更好地理解嵌入式操作系統的實現原理.本文主要闡述FreeRTOS系統的任務調度機制、時間
    發表于 12-20 06:34

    Freertos關于堆內存管理的相關資料分享

    內存管理Malloc、Free防止內存碎片Freertos
    發表于 12-27 08:12

    FreeRTOS源碼介紹

    。而且一些常用的功能,隊列,內存管理,信號量之類的,都有,基本上徹底弄懂一個,對以后理解別的也有幫助。1. FreeRTOS介紹FreeRTOS其實不用再多介紹了,現在太火了,主要是免
    發表于 02-14 07:42

    FreeRTOS代碼剖析之1:內存管理Heap

    內存管理是一個操作系統的重要組成部分之一,所有應用程序都離不開操作系統的內存管理。因此,在剖析FreeRTOS的內核代碼之前,前對
    發表于 02-09 05:25 ?971次閱讀
    <b class='flag-5'>FreeRTOS</b>代碼剖析之1:<b class='flag-5'>內存</b><b class='flag-5'>管理</b>Heap

    FreeRTOS代碼剖析之3:內存管理Heap

    FreeRTOS8.0.1的第三個模型Heap_3,可以說是最容易理解的一個內存管理模型。因為在這個模型里,FreeRTOS直接將標準C庫
    發表于 02-09 05:30 ?441次閱讀

    基于FreeRTOS的嵌入式實時操作系統的原理和實現

    FreeRTOS是一個源碼公開的免費的嵌入式實時操作系統,通過研究其內核可以更好地理解嵌入式操作系統的實現原理.本文主要闡述FreeRTOS系統的任務調度機制、時間
    發表于 11-18 03:34 ?6717次閱讀

    嵌入式操作系統FreeRTOS內存如何管理和堆

    嵌入式操作系統FreeRTOS內存管理和堆
    的頭像 發表于 01-10 15:17 ?4796次閱讀
    嵌入式操作系統<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>如何<b class='flag-5'>管理</b>和堆

    FreeRTOS高級篇7---FreeRTOS內存管理分析

    FreeRTOS操作系統將內核與內存管理分開實現,操作系統內核僅規定了必要的內存管理函數原型,而不關心這些
    發表于 01-26 17:36 ?8次下載
    <b class='flag-5'>FreeRTOS</b>高級篇7---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>分析

    FreeRTOS系列第8篇---FreeRTOS內存管理

    本文介紹內存管理的基礎知識,詳細源碼分析見《 FreeRTOS高級篇7---FreeRTOS內存
    發表于 01-26 17:56 ?17次下載
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>

    FreeRTOS源碼下載

    內存管理文件在FreeRTOS\portable\MemMang文件夾下,FreeRTOS提供了五種內存
    的頭像 發表于 02-10 11:00 ?3845次閱讀
    <b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>源碼</b>下載

    FreeRTOS內存管理簡介

    ,比如任務創建函數 xTaskCreateStatic(),使用此函數創建任務的時候需要由用戶定義任務堆棧,我們不討論這種靜態方法。 使用動態內存管理的時候 FreeRTOS 內核在創建任務、隊列、信號量的時候會動態的申請 RA
    的頭像 發表于 07-30 10:26 ?704次閱讀

    FreeRTOS內存管理實現

    FreeRTOS是一個為嵌入式系統設計的開源實時操作系統。它提供了一個多任務內核和一系列功能,適合在資源受限的設備上管理實時任務和應用程序。FreeRTOS內存
    的頭像 發表于 10-10 16:17 ?906次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>實現
    主站蜘蛛池模板: 成人在线观看播放| 欧美日韩888在线观看| 亚洲国产中文字幕在线视频综合| 好男人好资源视频高清| 2019久久这里只精品热在线观看| 欧美性类s0x| 国产精品一区二区人妻无码| 伊人久久大香网| 日韩精品 电影一区 亚洲高清 | 日日操天天操夜夜操| 国产亚洲视频在线观看| 98久久人妻少妇激情啪啪| 午夜国产理论| 欧美506070| 黄小飞二人转| 成人在线不卡视频| 伊人久久中文| 无码乱人伦一区二区亚洲一| 男人私gay挠脚心vk视频| 国产免费啪嗒啪嗒视频看看| 99精品国产电影| 亚洲精品色婷婷在线蜜芽| 欧美日韩高清一区二区三区| 好紧好湿太硬了我太爽了小说 | 国产精品美女久久久久浪潮AV| 91av成年影院在线播放| 性生大片免费看| 日本妈妈xxxx| 免费国产在线观看| 狠狠躁日日躁人人爽| 俄罗斯1819y0u| 99久久精品费精品蜜臀AV| 亚洲片在线观看| 特黄特色大片免费播放器试看 | 国产精品JIZZ在线观看A片| 999精品国产人妻无码系列| 亚洲欧美日韩中字视频三区| 双性诱受灌满哭求饶BL| 欧美末成年videos丨| 两个人的视频日本在线观看完整| 国产一区内射最近更新|