吴忠躺衫网络科技有限公司

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

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

3天內不再提示

heap_1內存分配方法

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-30 10:33 ? 次閱讀

heap_1 內存分配方法

動 態 內 存 分 配 需 要 一 個 內 存 堆 , FreeRTOS 中 的 內 存 堆 為 ucHeap[] , 大 小 為configTOTAL_HEAP_SIZE,這個前面講 FreeRTOS 配置的時候就講過了。不管是哪種內存分配方法,它們的內存堆都為 ucHeap[],而且大小都是 configTOTAL_HEAP_SIZE。內存堆在文件heap_x.c(x 為 1~5)中定義的,比如 heap_1.c 文件就有如下定義:

#if(configAPPLICATION_ALLOCATED_HEAP==1)

extern

uint8_t

ucHeap[configTOTAL_HEAP_SIZE];

//需要用戶自行定義內存堆

#else

static

uint8_t

ucHeap[configTOTAL_HEAP_SIZE];

//編譯器決定

#endif

當宏 configAPPLICATION_ALLOCATED_HEAP 為 1 的時候需要用戶自行定義內存堆,否則的話由編譯器來決定,默認都是由編譯器來決定的。如果自己定義的話就可以將內存堆定義到外部 SRAM 或者 SDRAM 中。

heap_1 實現起來就是當需要 RAM 的時候就從一個大數組(內存堆)中分一小塊出來,大數組(內存堆)的容量為 configTOTAL_HEAP_SIZE。使用函數 xPortGetFreeHeapSize() 可以獲取內存堆中剩余內存大小。

heap_1 特性如下:

1、適用于那些一旦創建好任務、信號量和隊列就再也不會刪除的應用,實際上大多數的 FreeRTOS 應用都是這樣的。

2、具有可確定性(執行所花費的時間大多數都是一樣的),而且不會導致內存碎片。

3、代碼實現和內存分配過程都非常簡單,內存是從一個靜態數組中分配到的,也就是適合于那些不需要動態內存分配的應用。

如果使用 heap_1,一旦申請內存成功就不允許釋放!但是 heap_1 的內存分配過程簡單,如此看來 heap_1 似乎毫無任何使用價值啊。千萬不能這么想,有很多小型的應用在系統一開始就創建好任務、信號量或隊列等,在程序運行的整個過程這些任務和內核對象都不會刪除,那么這個時候使用 heap_1 就很合適的。

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

    關注

    5092

    文章

    19177

    瀏覽量

    307663
  • 內存
    +關注

    關注

    8

    文章

    3055

    瀏覽量

    74327
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62395
收藏 人收藏

    評論

    相關推薦

    C語言知識總結:動態內存分配

    動態內存分配就 是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存方法。動態
    發表于 10-24 15:52 ?898次閱讀

    請問cmd中heap默認是在哪個段分配呢?

    我cmd文件分配如下,請問:1 stack分配是根據在子函數中用到的最大的局部變量,比如數組大小來分配的么?而heap
    發表于 10-25 09:53

    基于FreeRTOS內存管理Heap_4.c的實現方法

    Heap_4.c,發現它的實現方法還挺簡單的,而且比較實用,不過為了要像原子哥的內存管理那樣管理三個內存池,還需要稍稍修改一下,我已經修改好了,測試了一下沒發現問題,上傳上來給大家瞧瞧
    發表于 07-15 21:46

    嵌入式系統內存分配方式是怎樣的

    一篇講透嵌入式系統內存分配方
    發表于 12-17 07:40

    一種嵌入式系統的內存分配方

    嵌入式系統中對實時性的保證,要求內存分配過程要盡可能地快。因此在嵌入式系統中,不可能采用通用操作系統中復雜而完善的內存分配策略,一般都采用簡單、快速的
    發表于 05-24 14:30 ?2399次閱讀

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

    FreeRTOS8.0.1進行剖析研究。參考資料為《Using the FreeRTOS Real Time Kernel-A Practical Guide opened》。 Heap_1.c的注釋說明,Heap_1
    發表于 02-09 05:25 ?985次閱讀
    FreeRTOS代碼剖析之<b class='flag-5'>1</b>:<b class='flag-5'>內存</b>管理<b class='flag-5'>Heap</b>

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

    在FreeRTOS8.0.1這個版本中,一共有四個內存堆模型。這一次講的就是第二個模型Heap_2.c。從一開始就可以看到注釋中對Heap_2的模型解釋:這是對pvPortMalloc
    發表于 02-09 05:28 ?866次閱讀
    FreeRTOS代碼剖析之2:<b class='flag-5'>內存</b>管理<b class='flag-5'>Heap</b>

    淺談內存分配方式 避免內存浪費問題

    說到內存分配方式,就不得不提連續分配方式。這種方式是指為一個用戶程序分配一個連續的內存空間,它曾被廣泛的用于20世紀60~70年代的OS中
    發表于 03-03 11:22 ?1461次閱讀

    什么是堆內存?堆內存是如何分配的?

    在一般的編譯系統中,堆內存分配方向和棧內存是相反的。當棧內存從高地址向低地址增長的時候,堆內存從低地址向高地址
    的頭像 發表于 07-05 17:58 ?1w次閱讀

    韋東山freeRTOS系列教程之內存管理(2)

    文章目錄 教程目錄 2.1 為什么要自己實現內存管理 2.2 FreeRTOS的5種內存管理方法 2.2.1 Heap_1 2.2.2 Heap
    發表于 11-29 16:58 ?1054次閱讀
    韋東山freeRTOS系列教程之<b class='flag-5'>內存</b>管理(2)

    heap_2內存的特性與分配方法

    heap_2 內存分配方法 heap_2 提供了一個更好的分配算法,不像 heap_1那樣,
    的頭像 發表于 07-30 10:36 ?695次閱讀

    FreeRTOS heap_3內存分配方法

    heap_3 內存分配方法 這個分配方法是對標準 C 中的函數 malloc()和 free()的簡單封裝,FreeRTOS 對這兩個函數做了線程保護。
    的頭像 發表于 07-30 10:40 ?781次閱讀
    FreeRTOS <b class='flag-5'>heap</b>_3<b class='flag-5'>內存</b><b class='flag-5'>分配方法</b>

    heap_4內存分配方法介紹

    heap_4 內存分配方法 heap_4 提供了一個最優的匹配算法,不像 heap_2,heap
    的頭像 發表于 07-30 10:42 ?989次閱讀

    FreeRTOS heap_5內存分配方法介紹

    heap_5 內存分配方法 heap_5 使用了和 heap_4 相同的合并算法,內存管理實現起
    的頭像 發表于 07-30 10:47 ?1121次閱讀

    如何自定義內存控制器的設置

    在FreeRTOS中自定義內存控制器的設置,主要涉及到內存分配策略的選擇和配置。FreeRTOS提供了多種內存分配策略,如
    的頭像 發表于 09-02 14:28 ?574次閱讀
    百家乐棋牌技巧| 金鼎百家乐官网局部算牌法| 乐宝百家乐官网游戏| 百家乐网页游戏| 皇家赌场下载| 襄汾县| 百家乐官网平台开户哪里优惠多| 新澳门百家乐官网娱乐城| 百家乐官网电投软件| 赌百家乐官网可以赢钱| 百家乐官网倍投| 美高梅百家乐娱乐城| 如何玩百家乐的玩法技巧和规则| 大发888大发888娱乐城| 同花顺国际娱乐城| 百家乐怎样玩才会赢钱| 尊博| 美国百家乐官网怎么玩| 恒丰百家乐官网的玩法技巧和规则 | 大发888娱乐城888| 真钱博彩网| 百家乐官网技巧头头娱乐| 乐九百家乐游戏| 最好百家乐的玩法技巧和规则| 大发888大发体育| 皇室国际娱乐城| 百家乐官网赌场论坛| 百家乐游戏规测| 百家乐方案| 德州扑克概率计算| 百家乐官网看炉子的方法| 杨公24山| LV百家乐娱乐城| 赌球赔率| 百家乐官网跟路技巧| 百家乐平台信誉排名| 大发888娱乐城 建账号| 平博百家乐官网游戏| 爱赢百家乐的玩法技巧和规则 | 百家乐官网视频游戏聊天| 百家乐de概率|