那曲檬骨新材料有限公司

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

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

3天內不再提示

關于FreeRTOS內存分配多少才合適

黃工的嵌入式技術圈 ? 來源:網站整理 ? 2020-03-06 15:04 ? 次閱讀

一位朋友問:黃哥,我剛學FreeRTOS不久,我想問一下,創建一個任務,堆棧分配多少才合適呢?

1寫在前面

這個關于FreeRTOS操作系統內存分配的問題,其實只要大概明白內存管理,以及資源分配的一些知識,相信就不會存在這種疑惑。

操作系統內存分配如果深入分析的話,知識蠻多的,本文只針對開篇的問題展開一些相關知識的講解。

2

操作系統內存管理

FreeRTOS提供多種內存管理方式,在MemMang文件夾下有5個文件:heap_1到heap_5。

heap,其實是堆的意思,換句話說FrreRTOS系統的內存就是通過分配堆來實現的。(內存管理的知識較多,大家有空可以網上多了解一下,這里不講述)

而目前FreeRTOS常用的就是heap_4這種內存管理方式:通過事先為系統資源分配一個堆(數組),如下圖:

1.可配置在外部,或在heap_4中分配堆;

2.通過FreeRTOSConfig.h配置堆的大小,注意大小單位為字節。

提示:heap_1至heap_5其他管理方式其實還是有很大差別,這里不講述(后面抽時間再講述),具體可以參看:

https://www.freertos.org/a00111.html

3

系統資源內存分配

FreeRTOS中系統為各資源分配內存,使用heap_4內存管理方式就是在創建之初就分配一段內存。

而分配的這個資源就是從整個系統堆ucHeap劃分了一塊出來。我們創建一個任務,分配堆棧大小的原理,進一步查看代碼:

提示:這個創建任務大小為我們填寫數值x4字節。比如,填寫128,其實分配的空間為512Byte.(很多人以為單位是字節,發現多創建幾個任務,內存就分配失敗了)

再比如,創建隊列:

參數1:隊列長度,也就是隊列的數量;

參數2:隊列大小,也就是一個隊列有多少字節;

隊列分配的內存大小就是:參數1x參數2 (單位Byte)。

這里就舉上面兩個例子,重點就是強調:分配內存的單位是字節(Byte),還是字(4Byte)。

4

哪些變量會占用任務內存

回到最開始的問題:一個任務需要分配多大內存?

任務堆棧就是用于存放該任務的變量數據(也就是程序在執行其他任務時,需要把該任務變量數據保存起來)。

那么,一個任務有哪些數據才算是“變量數據”呢?

一個是任務自身需要的內存空間,FreeROS任務自身(如TCB)需要的空間好像就七八十個字節(我之前計算過,記不得很清楚了)。

二是你自己應用程序臨時變量(如下圖),這個就是由你自己計算,或者估計大小。

許多朋友一上來直接分配堆棧的大小為256(x4字節),或512(x4字節),但自己應用程序臨時變量并不多。

如果你應用程序就幾個字節的臨時變量,分配64(x4字節)都完全夠你用。

提示:這個“臨時變量”包含你應用程序調用的函數所分配的變量。

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

    關注

    8

    文章

    3055

    瀏覽量

    74326
  • 堆棧
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19825
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62394
收藏 人收藏

    評論

    相關推薦

    【RA-Eco-RA4E2-64PIN-V1.0開發板試用】05、FreeRTOS

    于系統內存不是連續塊的情況非常有用。` 這里我選擇Heap 4算法。 點擊LED1 -- New Stack -- RTOS -- FreeRTOS Heap4 接下來可能會報錯,要開啟動態內存
    發表于 12-17 11:53

    opa627BP用來做前級放大,接地電阻用多少合適?反饋電阻用多少合適

    你好,opa627BP 用來做前級放大,接地電阻用多少合適,反饋電阻用多少合適,謝謝
    發表于 10-31 07:38

    如何使用反射內存交換機

    反射內存交換機是一種用于實現高速數據共享和通信的關鍵設備,以下是關于如何使用反射內存交換機的詳細介紹:一、前期準備?在開始使用反射內存交換機之前,需要進行以下準備工作:?1.了解系統需
    發表于 09-14 09:23 ?0次下載

    轉載 golang內存分配

    Go 的分配采用了類似 tcmalloc 的結構.特點: 使用一小塊一小塊的連續內存頁, 進行分配某個范圍大小的內存需求. 比如某個連續 8KB 專門用于
    的頭像 發表于 09-05 14:12 ?306次閱讀
    轉載 golang<b class='flag-5'>內存</b><b class='flag-5'>分配</b>

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

    FreeRTOS中自定義內存控制器的設置,主要涉及到內存分配策略的選擇和配置。FreeRTOS提供了多種
    的頭像 發表于 09-02 14:28 ?574次閱讀

    freertos最多支持多少個任務

    FreeRTOS是一個輕量級的實時操作系統(RTOS),其設計初衷就是為了提供簡單、可靠且高效的實時任務管理。關于FreeRTOS最多支持多少個任務的問題,實際上并沒有一個固定的上限,這主要取決于
    的頭像 發表于 09-02 14:21 ?1182次閱讀

    堆棧和內存的基本知識

    本文主要聊聊關于堆棧的內容。包括堆棧和內存的基本知識。常見和堆棧相關的 bug,如棧溢出,內存泄漏,堆內存分配失敗等。后面介紹軟件中堆棧統計
    的頭像 發表于 08-29 14:10 ?573次閱讀
    堆棧和<b class='flag-5'>內存</b>的基本知識

    可以用os_malloc() 分配多少內存?有哪些限制?

    我可以用 os_malloc() 分配多少內存?有哪些限制?
    發表于 07-15 06:32

    在tc397 + freertos + lwip + cycloneDDS中分配內存失敗了怎么解決?

    你好,我在tc397中使用tc397+freertos+lwip的cyscloneDDS,因為cycloneDDS需要分配較大的內存: ddsi_rbufpool_new: rb
    發表于 07-05 07:17

    ESP32S3+LVGL創建一個界面,請問能只在SPIRAM分配內存,IRAM不分配嗎?

    各位前輩好。ESP32S3+LVGL的開發的過程中發現,創建一個界面,會同時在SPIRAM和IRAM分配相同大小的內存。請問能只在SPIRAM分配內存,IRAM不
    發表于 06-06 07:45

    FreeRTOS如何在中斷中調用內存分配函數?

    最近在玩FreeRTOS,遇到一個問題,就是不知如何在中斷中調用內存分配函數。pvPortMalloc函數中會調用xTaskResumeAll,而這個函數不能再中斷調用,所以請問在中斷中進行
    發表于 05-08 08:25

    freertos任務創建,每一個任務分配內存是多大才好,怎么計算呢?

    小白剛剛接觸freertos,想問一下就創建任務而言,每一個任務分配內存是多大才好,怎么計算呢? 另外,每個任務的執行周期怎么確定?在任務里面放延時函數嗎?
    發表于 04-23 06:39

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存不存在內存泄漏問題,因為棧內存會自動分配和釋放
    發表于 03-19 11:38 ?574次閱讀
    C語言<b class='flag-5'>內存</b>泄漏問題原理

    Linux內核內存管理之內核非連續物理內存分配

    我們已經知道,最好將虛擬地址映射到連續頁幀,從而更好地利用緩存并實現更低的平均內存訪問時間。然而,如果對內存區域的請求并不頻繁,那么考慮基于通過連續線性地址訪問非連續頁幀的分配方案是有意義的。該模式
    的頭像 發表于 02-23 09:44 ?1076次閱讀
    Linux內核<b class='flag-5'>內存</b>管理之內核非連續物理<b class='flag-5'>內存</b><b class='flag-5'>分配</b>

    Linux內核內存管理之ZONE內存分配

    內核中使用ZONE分配器滿足內存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內存大小請求。
    的頭像 發表于 02-21 09:29 ?949次閱讀
    百家乐官网平台信誉排名| 百家乐打立了| 大发888集团| 百家乐官网qq游戏| 大发888娱乐游戏下载| 百家乐官网龙虎扑克| 金赞百家乐的玩法技巧和规则| 澳门百家乐官网国际| 百家乐破解版| 百家乐官网网站东方果博| 金牌百家乐的玩法技巧和规则| 百家乐秘诀| 偃师市| 百家乐三宝| 百家乐官网专家赢钱打法| 凤凰百家乐的玩法技巧和规则| 澳门百家乐官网的赢钱不倒翁| 钱柜百家乐娱乐城| 百家乐官网揽法大全| 立博国际博彩公司| 网上百家乐真的假的| 百家乐官网百乐发破解版| 太阳城伞| 20人百家乐官网桌| 宁陕县| 骰子百家乐的玩法技巧和规则| 百家乐官网板路| 澳门顶级赌场百家乐| 百家乐已破解的书籍| 迪威百家乐官网娱乐| 赌王百家乐的玩法技巧和规则| 百家乐官网的奥秘| 沙龙国际娱乐网站| 百家乐特殊技巧| 百家乐官网网站制作| 云博娱乐城| 真人百家乐博弈| 网上百家乐官网真坑人| 境外赌博| 威尼斯人娱乐城开户| 百家乐如何看面|