在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

FreeRTOS內存是動態分配嗎?

strongerHuang ? 來源:嵌入式專欄 ? 作者:嵌入式專欄 ? 2023-03-24 09:55 ? 次閱讀

你可能會好奇:FreeRTOS可以創建任務,也可以刪除任務,它是動態分配的內存嗎?

xTaskCreate(LED_Task, "LED_Task", 128, NULL, 6, NULL);

這個問題如果要細說,牽涉到的知識點比較多,下面挑幾個重要相關的內容來解答這個問題。

內存靜態和動態分配

內存分配一般分為:靜態和動態分配。

1.靜態分配內存

什么叫靜態分配內存?

簡單來說,就是在編譯的時候就分配的內存。你可以理解為芯片上電,指定的某區域(地址)內存就被占用了。

一般有幾種情況,比如:

啟動分配堆棧:

Stack_Size    EQU     0x400

定義一個靜態變量,這個就是最好理解的一個例子:

static int a;

定義一個全局變量/數組等:

intchar;

2.動態分配內存

什么叫動態分配內存? 與靜態分配對應,動態就是不確定在某個時刻分配的內存。 最常見的就是某個函數定義一個局部變量,如果這個函數被調用,就會臨時分配一個內存空間給這個變量,執行完函數,這個內存就被釋放了。

void UART_Send(char *p)
{
  char buf[10];
  //......
}
還有一個經典的就是 malloc() 動態分配內存函數,這個函數對于普通開發者一般不建議使用,因為存在一些“弊端”。 比如:忘記使用 free() 釋放內存,還有就是容易產生“內存碎片”等。

梳理FreeRTOS內存分配

1.全局數組(堆棧)

FreeRTOS的內存是在 FreeRTOSConfig.h 文件分配的一個全局數組,這個內存大小由用戶自己根據情況分配,比如:

#define configTOTAL_HEAP_SIZE     ((size_t)(10 * 1024))

33ce5790-c985-11ed-bfe3-dac502259ad0.png

數組(堆棧)ucHeap:

33ebf3c2-c985-11ed-bfe3-dac502259ad0.png

這個數組是 FreeRTOS 系統的“堆棧”,創建任務、信號量、隊列等都會調用這個堆棧。

2.創建任務

FreeRTOS創建任務,分配堆棧大小,比如:128“字”

xTaskCreate(LED_Task, "LED_Task", 128, NULL, 6, NULL);

提醒:這里“字”是單位,比如:uint32_t

通過進一步追蹤代碼,你會發現在“創建任務”函數中調用了【pvPortMalloc】函數分配內存。

34011220-c985-11ed-bfe3-dac502259ad0.png

這是系統自定義的函數,并非標準的malloc函數。 看似是在“動態分配內存”,實際是在“瓜分”上面定義的全局數組(堆棧)。 具體如何“瓜分”的,可以參看“heap_4.c”源代碼(通過我們使用“heap_4.c”內存分配方式,如果其他的可以參看對應的源碼)。 其他創建信號量、隊列也是類似原理。

3.刪除任務

FreeRTOS刪除任務,會調用“vPortFree()”函數釋放對應的內存。

3412c9ac-c985-11ed-bfe3-dac502259ad0.png

這里會牽涉到 TCB(任務控制塊),就是任務相關的這一塊數據。(這里不細說,后面有機會再說)。

FreeRTOS是動態分配內存嗎?

看到這里,你能回答開篇這個問題了嗎?

答案:FreeRTOS不是動態分配內存,只是模擬了動態分配的方式,實際的內存是靜態分配的。

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

    關注

    8

    文章

    3025

    瀏覽量

    74056
  • 函數
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62622
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62181
  • 編譯
    +關注

    關注

    0

    文章

    657

    瀏覽量

    32872
  • 動態分配
    +關注

    關注

    0

    文章

    5

    瀏覽量

    9730

原文標題:FreeRTOS內存是動態分配嗎?

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言既然可以自動為變量分配內存,為什么還要用動態分配內存呢?

    不知道大家在學習C語言動態分配內存的時候有沒有過這樣的疑問,既然系統可以自動幫我們分配內存,為什么還需要我們程序員自己去分配
    發表于 12-13 11:14 ?1064次閱讀

    FreeRTOS內存機制詳解

    FreeRTOS是一種實時操作系統,它提供了多種內存分配方式,包括動態內存分配和靜態內存
    的頭像 發表于 12-31 16:49 ?2706次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>機制詳解

    怎么在LL2和DDR3上用malloc同時動態分配內存

    程序中需要用malloc動態分配兩塊內存,分別在LL2和DDR3上,請問用cmd動態分配的空間都是在.sysmem里面嗎?怎么在兩塊內存中都動態
    發表于 06-21 09:29

    請教關于在堆區的動態分配內存問題

    ;]CmplxSgn_t;在定義信號之后會動態分配一段arrayLen長的內存給ptSignalArray,在信號的使命結束后會把內存釋放掉。但是俺剛接觸dsp不久,有資料說頻繁的申請/釋放
    發表于 08-07 08:29

    請問使用動態內存分配安全嗎?

    在使用完畢后,需要顯式的釋放之,這就要求程序員對動態分配內存了然于胸。在非常重視安全(safety-critical)的嵌入式C語言程序開發中,動態內存分配廣泛被認為是禁忌。使用C語
    發表于 12-15 06:10

    使用動態內存分配安全嗎

    安全嗎?”為了更加安全穩定,美國軍方禁止在C語言程序中使用malloc()使用動態內存分配安全嗎?在C語言程序開發中,動態內存分配允許程序在運行時向系統申請
    發表于 12-15 07:44

    CH545芯片可以使用malloc函數進行內存動態分配嘛?

    如題,請問貴公司的單片機芯片(如CH545)可以使用malloc函數進行內存動態分配嘛?
    發表于 06-24 12:46

    請問沒有MMU的ARM芯片是否支持使用malloc()函數動態分配內存呢?

    請問沒有MMU的ARM芯片是否支持使用malloc()函數動態分配內存呢?求解答|
    發表于 10-17 15:41

    LPCXpresso55S16如何從閃存中動態分配內存

    我正在使用 LPCXpresso55S16,我想從閃存中動態分配內存,向其中寫入數據,從中讀取數據,并在需要時釋放它。是否有教程或任何人都可以幫助我嗎?
    發表于 06-09 06:57

    動態分配內存知識

    最近學習動態分配內存 這個程序是我自己編的,呵呵,好有成就感啊... #include stdio.h/*Feng原創...*/ #define N 2 char *GetCity(void
    發表于 05-28 15:27 ?99次下載

    零矢量動態分配的-直接轉矩控制

    零矢量動態分配的-直接轉矩控制
    發表于 01-21 11:49 ?1次下載

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

    FreeRTOS內存分配多少才合適
    的頭像 發表于 03-06 15:04 ?1.9w次閱讀

    51單片機內存動態分配

    51單片機內存動態分配序言最近玩51單片機碰到一個問題,51中malloc函數并不能像在PC上一樣正常運行,這涉及到了內存池的概念。下面就來演示一下如何在單片機上也可正常使用動態內存
    發表于 11-12 14:36 ?11次下載
    51單片機<b class='flag-5'>內存</b><b class='flag-5'>動態分配</b>

    為什么需要動態分配內存

    今天的文章會用到以下知識點,大家可以作為了解內容去學習:靜態內存動態內存、堆、棧、全局變量、指針等;
    的頭像 發表于 02-17 10:02 ?2835次閱讀
    為什么需要<b class='flag-5'>動態分配</b><b class='flag-5'>內存</b>?

    C語言怎么建立內存動態分配

    在C語言中,全局變量是分配在內存中的靜態存儲區的,非靜態的局部變量,包括形參是分配在內存中的動態存儲區的,這個存儲區是一個“棧”的區域。
    的頭像 發表于 03-10 15:30 ?855次閱讀
    主站蜘蛛池模板: 69日本xxxxxxxxx13| 国产三级久久久精品三级| 制服丝袜中文字幕第一页| 色视频网站在线| 丁香婷婷在线| 国产成人影视| 亚洲综合色婷婷| 国产乱码1卡一卡二卡| 国产午夜在线视频| 77米奇影院| 西西人体44rt高清午夜| 一级片一级片一级片| 色婷婷激婷婷深爱五月老司机 | 日本www色| 天天爽夜夜爽人人爽一区二区| 4455四色永久免费| 日本大片免费观看视频| 天天爆操| 在线日韩一区| 国产ar高清视频+视频| 欧美18在线| 全色网站| 久久九色| 四虎永久在线精品国产| 亚洲第一综合| 九九re热| 成人欧美一区二区三区黑人免费 | 欧美极品在线观看| 日韩乱轮| 久久国产乱子伦精品免费一| 亚洲 欧美 日韩 综合| 91黄色视屏| 亚洲视屏一区| 激情六月色| 欧美色图影院| 亚洲国产成人在线| 午夜视频久久| 有码日韩| 午夜影院免费入口| 高h乱肉辣文辣书阁| 成人狠狠色综合|