欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

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

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

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

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

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

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

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

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

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

一般有幾種情況,比如:

啟動分配堆棧:

Stack_Size    EQU     0x400

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

static int a;

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

intchar;

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

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

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

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

1.全局數(shù)組(堆棧)

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

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

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

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

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

這個數(shù)組是 FreeRTOS 系統(tǒng)的“堆?!保瑒?chuàng)建任務(wù)、信號量、隊列等都會調(diào)用這個堆棧。

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

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

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

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

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

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

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

3.刪除任務(wù)

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

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

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

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

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

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

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

    關(guān)注

    8

    文章

    3060

    瀏覽量

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

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62998
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

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

    關(guān)注

    0

    文章

    661

    瀏覽量

    33064
  • 動態(tài)分配
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    9750

原文標題:FreeRTOS內(nèi)存是動態(tài)分配嗎?

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

    請問使用動態(tài)內(nèi)存分配安全嗎?

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

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

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

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

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

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

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

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

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

    動態(tài)分配內(nèi)存知識

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

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

    零矢量動態(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單片機內(nèi)存動態(tài)分配

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

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

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

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

    在C語言中,全局變量是分配在內(nèi)存中的靜態(tài)存儲區(qū)的,非靜態(tài)的局部變量,包括形參是分配在內(nèi)存中的動態(tài)存儲區(qū)的,這個存儲區(qū)是一個“棧”的區(qū)域。
    的頭像 發(fā)表于 03-10 15:30 ?892次閱讀