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

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

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

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

FreeRTOS內(nèi)存是動(dòng)態(tài)分配嗎?

strongerHuang ? 來(lái)源:嵌入式專(zhuān)欄 ? 作者:嵌入式專(zhuān)欄 ? 2023-03-24 09:55 ? 次閱讀

你可能會(huì)好奇:FreeRTOS可以創(chuàng)建任務(wù),也可以刪除任務(wù),它是動(dòng)態(tài)分配的內(nèi)存嗎?

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

這個(gè)問(wèn)題如果要細(xì)說(shuō),牽涉到的知識(shí)點(diǎn)比較多,下面挑幾個(gè)重要相關(guān)的內(nèi)容來(lái)解答這個(gè)問(wèn)題。

內(nèi)存靜態(tài)和動(dòng)態(tài)分配

內(nèi)存分配一般分為:靜態(tài)和動(dòng)態(tài)分配。

1.靜態(tài)分配內(nèi)存

什么叫靜態(tài)分配內(nèi)存?

簡(jiǎn)單來(lái)說(shuō),就是在編譯的時(shí)候就分配的內(nèi)存。你可以理解為芯片上電,指定的某區(qū)域(地址)內(nèi)存就被占用了。

一般有幾種情況,比如:

啟動(dòng)分配堆棧:

Stack_Size    EQU     0x400

定義一個(gè)靜態(tài)變量,這個(gè)就是最好理解的一個(gè)例子:

static int a;

定義一個(gè)全局變量/數(shù)組等:

intchar;

2.動(dòng)態(tài)分配內(nèi)存

什么叫動(dòng)態(tài)分配內(nèi)存? 與靜態(tài)分配對(duì)應(yīng),動(dòng)態(tài)就是不確定在某個(gè)時(shí)刻分配的內(nèi)存。 最常見(jiàn)的就是某個(gè)函數(shù)定義一個(gè)局部變量,如果這個(gè)函數(shù)被調(diào)用,就會(huì)臨時(shí)分配一個(gè)內(nèi)存空間給這個(gè)變量,執(zhí)行完函數(shù),這個(gè)內(nèi)存就被釋放了。

void UART_Send(char *p)
{
  char buf[10];
  //......
}
還有一個(gè)經(jīng)典的就是 malloc() 動(dòng)態(tài)分配內(nèi)存函數(shù),這個(gè)函數(shù)對(duì)于普通開(kāi)發(fā)者一般不建議使用,因?yàn)榇嬖谝恍氨锥恕薄? 比如:忘記使用 free() 釋放內(nèi)存,還有就是容易產(chǎn)生“內(nèi)存碎片”等。

梳理FreeRTOS內(nèi)存分配

1.全局?jǐn)?shù)組(堆棧)

FreeRTOS的內(nèi)存是在 FreeRTOSConfig.h 文件分配的一個(gè)全局?jǐn)?shù)組,這個(gè)內(nèi)存大小由用戶(hù)自己根據(jù)情況分配,比如:

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

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

數(shù)組(堆棧)ucHeap:

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

這個(gè)數(shù)組是 FreeRTOS 系統(tǒng)的“堆棧”,創(chuàng)建任務(wù)、信號(hào)量、隊(duì)列等都會(huì)調(diào)用這個(gè)堆棧。

2.創(chuàng)建任務(wù)

FreeRTOS創(chuàng)建任務(wù),分配堆棧大小,比如:128“字”

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

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

通過(guò)進(jìn)一步追蹤代碼,你會(huì)發(fā)現(xiàn)在“創(chuàng)建任務(wù)”函數(shù)中調(diào)用了【pvPortMalloc】函數(shù)分配內(nèi)存。

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

這是系統(tǒng)自定義的函數(shù),并非標(biāo)準(zhǔn)的malloc函數(shù)。 看似是在“動(dòng)態(tài)分配內(nèi)存”,實(shí)際是在“瓜分”上面定義的全局?jǐn)?shù)組(堆棧)。 具體如何“瓜分”的,可以參看“heap_4.c”源代碼(通過(guò)我們使用“heap_4.c”內(nèi)存分配方式,如果其他的可以參看對(duì)應(yīng)的源碼)。 其他創(chuàng)建信號(hào)量、隊(duì)列也是類(lèi)似原理。

3.刪除任務(wù)

FreeRTOS刪除任務(wù),會(huì)調(diào)用“vPortFree()”函數(shù)釋放對(duì)應(yīng)的內(nèi)存。

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

這里會(huì)牽涉到 TCB(任務(wù)控制塊),就是任務(wù)相關(guān)的這一塊數(shù)據(jù)。(這里不細(xì)說(shuō),后面有機(jī)會(huì)再說(shuō))。

FreeRTOS是動(dòng)態(tài)分配內(nèi)存嗎?

看到這里,你能回答開(kāi)篇這個(gè)問(wèn)題了嗎?

答案:FreeRTOS不是動(dòng)態(tài)分配內(nèi)存,只是模擬了動(dòng)態(tài)分配的方式,實(shí)際的內(nèi)存是靜態(tài)分配的。

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

    關(guān)注

    8

    文章

    3034

    瀏覽量

    74137
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4338

    瀏覽量

    62739
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62226
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    659

    瀏覽量

    32903
  • 動(dòng)態(tài)分配
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    9748

原文標(biāo)題:FreeRTOS內(nèi)存是動(dòng)態(tài)分配嗎?

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言既然可以自動(dòng)為變量分配內(nèi)存,為什么還要用動(dòng)態(tài)分配內(nèi)存呢?

    不知道大家在學(xué)習(xí)C語(yǔ)言動(dòng)態(tài)分配內(nèi)存的時(shí)候有沒(méi)有過(guò)這樣的疑問(wèn),既然系統(tǒng)可以自動(dòng)幫我們分配內(nèi)存,為什么還需要我們程序員自己去分配
    發(fā)表于 12-13 11:14 ?1072次閱讀

    FreeRTOS內(nèi)存機(jī)制詳解

    FreeRTOS是一種實(shí)時(shí)操作系統(tǒng),它提供了多種內(nèi)存分配方式,包括動(dòng)態(tài)內(nèi)存分配和靜態(tài)內(nèi)存
    的頭像 發(fā)表于 12-31 16:49 ?2758次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內(nèi)存</b>機(jī)制詳解

    怎么在LL2和DDR3上用malloc同時(shí)動(dòng)態(tài)分配內(nèi)存

    程序中需要用malloc動(dòng)態(tài)分配兩塊內(nèi)存,分別在LL2和DDR3上,請(qǐng)問(wèn)用cmd動(dòng)態(tài)分配的空間都是在.sysmem里面嗎?怎么在兩塊內(nèi)存中都動(dòng)態(tài)
    發(fā)表于 06-21 09:29

    請(qǐng)教關(guān)于在堆區(qū)的動(dòng)態(tài)分配內(nèi)存問(wèn)題

    ;]CmplxSgn_t;在定義信號(hào)之后會(huì)動(dòng)態(tài)分配一段arrayLen長(zhǎng)的內(nèi)存給ptSignalArray,在信號(hào)的使命結(jié)束后會(huì)把內(nèi)存釋放掉。但是俺剛接觸dsp不久,有資料說(shuō)頻繁的申請(qǐng)/釋放內(nèi)
    發(fā)表于 08-07 08:29

    請(qǐng)問(wèn)使用動(dòng)態(tài)內(nèi)存分配安全嗎?

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

    使用動(dòng)態(tài)內(nèi)存分配安全嗎

    安全嗎?”為了更加安全穩(wěn)定,美國(guó)軍方禁止在C語(yǔ)言程序中使用malloc()使用動(dòng)態(tài)內(nèi)存分配安全嗎?在C語(yǔ)言程序開(kāi)發(fā)中,動(dòng)態(tài)內(nèi)存分配允許程序在運(yùn)行時(shí)向系統(tǒng)申請(qǐng)
    發(fā)表于 12-15 07:44

    CH545芯片可以使用malloc函數(shù)進(jìn)行內(nèi)存動(dòng)態(tài)分配嘛?

    如題,請(qǐng)問(wèn)貴公司的單片機(jī)芯片(如CH545)可以使用malloc函數(shù)進(jìn)行內(nèi)存動(dòng)態(tài)分配嘛?
    發(fā)表于 06-24 12:46

    請(qǐng)問(wèn)沒(méi)有MMU的ARM芯片是否支持使用malloc()函數(shù)動(dòng)態(tài)分配內(nèi)存呢?

    請(qǐng)問(wèn)沒(méi)有MMU的ARM芯片是否支持使用malloc()函數(shù)動(dòng)態(tài)分配內(nèi)存呢?求解答|
    發(fā)表于 10-17 15:41

    LPCXpresso55S16如何從閃存中動(dòng)態(tài)分配內(nèi)存

    我正在使用 LPCXpresso55S16,我想從閃存中動(dòng)態(tài)分配內(nèi)存,向其中寫(xiě)入數(shù)據(jù),從中讀取數(shù)據(jù),并在需要時(shí)釋放它。是否有教程或任何人都可以幫助我嗎?
    發(fā)表于 06-09 06:57

    動(dòng)態(tài)分配內(nèi)存知識(shí)

    最近學(xué)習(xí)動(dòng)態(tài)分配內(nèi)存 這個(gè)程序是我自己編的,呵呵,好有成就感啊... #include stdio.h/*Feng原創(chuàng)...*/ #define N 2 char *GetCity(void
    發(fā)表于 05-28 15:27 ?99次下載

    零矢量動(dòng)態(tài)分配的-直接轉(zhuǎn)矩控制

    零矢量動(dòng)態(tài)分配的-直接轉(zhuǎn)矩控制
    發(fā)表于 01-21 11:49 ?1次下載

    關(guān)于FreeRTOS內(nèi)存分配多少才合適

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

    51單片機(jī)內(nèi)存動(dòng)態(tài)分配

    51單片機(jī)內(nèi)存動(dòng)態(tài)分配序言最近玩51單片機(jī)碰到一個(gè)問(wèn)題,51中malloc函數(shù)并不能像在PC上一樣正常運(yùn)行,這涉及到了內(nèi)存池的概念。下面就來(lái)演示一下如何在單片機(jī)上也可正常使用動(dòng)態(tài)內(nèi)存
    發(fā)表于 11-12 14:36 ?11次下載
    51單片機(jī)<b class='flag-5'>內(nèi)存</b><b class='flag-5'>動(dòng)態(tài)分配</b>

    為什么需要動(dòng)態(tài)分配內(nèi)存

    今天的文章會(huì)用到以下知識(shí)點(diǎn),大家可以作為了解內(nèi)容去學(xué)習(xí):靜態(tài)內(nèi)存動(dòng)態(tài)內(nèi)存、堆、棧、全局變量、指針等;
    的頭像 發(fā)表于 02-17 10:02 ?2866次閱讀
    為什么需要<b class='flag-5'>動(dòng)態(tài)分配</b><b class='flag-5'>內(nèi)存</b>?

    C語(yǔ)言怎么建立內(nèi)存動(dòng)態(tài)分配

    在C語(yǔ)言中,全局變量是分配在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū)的,非靜態(tài)的局部變量,包括形參是分配在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū)的,這個(gè)存儲(chǔ)區(qū)是一個(gè)“棧”的區(qū)域。
    的頭像 發(fā)表于 03-10 15:30 ?860次閱讀
    主站蜘蛛池模板: 91亚洲 欧美 国产 制服 动漫| 日韩亚洲欧美中文在线| 欧美z000z猪| 亚洲AV精品无码国产一区| 99国产强伦姧在线看RAPE| 国产亚洲国际精品福利| 农民下乡在线观看3| 亚洲人成伊人成综合网久久久| 被室友C哭调教双性| 精品蜜臀AV在线天堂| 色色色999| 99re28久久热在线观看| 好好的曰com久久| 高h全肉图| 芒果视频看片在线观看| 亚洲国产韩国欧美在线不卡| 波多野结衣二区| 老司机亚洲精品影院| 亚洲va久久久久| 放射源分类办法| 免费国产福利| 亚洲中文字幕日产乱码2020| 97国产精品人妻无码免费| 国产亚洲精品a在线观看app| 日本xxxx69动漫| 69夫妻交友网| 久久99蜜桃精品麻豆| 无码一区国产欧美在线资源| 啊叫大点声欠CAO的SAO贷| 久热在线这里只有精品7| 亚洲乱码日产精品BD在线下载| 国产成人久久婷婷精品流白浆| 欧美成ee人免费视频| 中国欧美日韩一区二区三区| 国内一级一级毛片a免费| 我解开了岳的乳第一个女人 | 爆乳啪啪无码成人二区亚洲欧美| 久久综合老色鬼网站| 亚洲欧美综合在线中文| 国产精品一区二区在线观看| 肉动漫3D卡通无修在线播放|