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

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

3天內不再提示

FreeRTOS內存機制詳解

冬至子 ? 來(lái)源:網(wǎng)絡(luò )整理 ? 作者:網(wǎng)絡(luò )整理 ? 2023-12-31 16:49 ? 次閱讀

FreeRTOS內存分配方式

FreeRTOS是一種實(shí)時(shí)操作系統,它提供了多種內存分配方式,包括動(dòng)態(tài)內存分配和靜態(tài)內存分配。其中,動(dòng)態(tài)內存分配是最常用的一種方式,它允許程序在運行時(shí)動(dòng)態(tài)地申請和釋放內存空間。而靜態(tài)內存分配則是在編譯時(shí)就已經(jīng)確定了內存空間的大小和位置,無(wú)法在運行時(shí)進(jìn)行修改。

靜態(tài)分配內存:以靜態(tài)分配方式給任務(wù)、軟件定時(shí)器,信號量、互斥鎖等系統資源分配資源,不會(huì )調用freeRTOS的pvPortMalloc內存分配接口,在RAM在自定義內存空間(全局數組、全局變量等),創(chuàng )建任務(wù)、定時(shí)器。信號量、互斥鎖等資源,將自定義的內存空間與創(chuàng )建的系統資源綁定。內存分布如下圖所示:

image.png

動(dòng)態(tài)分配內存:以動(dòng)態(tài)分配方式給任務(wù)、軟件定時(shí)器,信號量、互斥鎖等系統資源分配資源,調用系統提供的pvPortMalloc內存分配接口,在系統的ucHeap中(使用heap_3.c的內存管理方式除外,使用heap_3.c內存方式,會(huì )直接調用c庫的malloc申請空間)申請任務(wù)、信號量、隊列、互斥鎖等所需的內存空間。內存分布如下圖所示(heap_3.c的內存管理方式除外):

image.png

在FreeRTOS中,動(dòng)態(tài)內存分配是通過(guò)函數xTaskCreate()來(lái)實(shí)現的。該函數可以創(chuàng )建一個(gè)任務(wù),并為其分配一定的??臻g和堆空間。其中,??臻g用于存儲函數調用時(shí)的局部變量和返回地址等信息,而堆空間則用于存儲任務(wù)運行時(shí)需要的數據和變量等。

除了xTaskCreate()函數之外,FreeRTOS還提供了其他的動(dòng)態(tài)內存分配函數,如vTaskAllocateBlock()、prvAllocateRAM()等。這些函數都可以用來(lái)申請一定大小的內存空間,并將其分配給指定的任務(wù)或數據結構使用。

需要注意的是,在使用動(dòng)態(tài)內存分配時(shí),需要確保所申請的內存空間不會(huì )超出系統可用的內存范圍。否則,可能會(huì )導致系統崩潰或其他不可預料的錯誤發(fā)生。因此,在使用動(dòng)態(tài)內存分配時(shí),需要謹慎地評估所需的內存大小,并根據實(shí)際需求進(jìn)行調整。

FreeRTOS內存操作相關(guān)接口

FreeRTOS提供了一系列的內存操作相關(guān)接口,用于對內存進(jìn)行管理和操作。其中,最常用的接口包括以下幾個(gè):

  1. xTaskCreate():創(chuàng )建一個(gè)任務(wù),并為其分配一定的??臻g和堆空間。
  2. vTaskDelete():刪除一個(gè)任務(wù),并釋放其占用的??臻g和堆空間。
  3. vPortFree():釋放一段已經(jīng)分配好的內存空間。
  4. prvAllocateRAM():在系統中申請一段連續的RAM空間,并將其分配給指定的數據結構使用。
  5. vTaskSuspendAll():暫停所有正在運行的任務(wù),以便進(jìn)行內存管理和其他操作。
  6. xTaskGetCurrentTaskHandle():獲取當前正在執行的任務(wù)句柄。
  7. uxTaskGetNumberOfTasks():獲取當前系統中正在運行的任務(wù)數量。
  8. pcTaskGetName():獲取指定任務(wù)的名稱(chēng)字符串。
  9. xQueueCreate():創(chuàng )建一個(gè)隊列,并為其分配一定的內存空間。
  10. xQueueSend():向指定的隊列中發(fā)送一個(gè)數據項。
  11. xQueueReceive():從指定的隊列中接收一個(gè)數據項。
  12. xQueuePeek():查看指定隊列中的第一個(gè)數據項。
  13. xQueueReset():清空指定隊列中的所有數據項。
  14. xQueueIsFull():判斷指定隊列是否已滿(mǎn)。
  15. xQueueIsEmpty():判斷指定隊列是否為空。

以上是FreeRTOS常用的一些內存操作相關(guān)接口,通過(guò)這些接口可以實(shí)現對任務(wù)、隊列等數據的管理和操作。需要注意的是,在使用這些接口時(shí),需要根據實(shí)際需求選擇合適的參數和選項,以確保系統的穩定性和可靠性。

FreeRTOS內存管理方式

FreeRTOS采用了一種先進(jìn)的內存管理方式,即基于優(yōu)先級的搶占式多任務(wù)調度機制。在這種機制下,每個(gè)任務(wù)都有一個(gè)優(yōu)先級,高優(yōu)先級的任務(wù)會(huì )優(yōu)先被調度執行,而低優(yōu)先級的任務(wù)則會(huì )等待高優(yōu)先級的任務(wù)執行完畢后再進(jìn)行調度。這種機制可以有效地避免任務(wù)之間的競爭和沖突,提高系統的響應速度和穩定性。

此外,FreeRTOS還采用了一種稱(chēng)為“就地”(in-place)的內存管理方式。在這種管理方式下,任務(wù)的??臻g和堆空間都是在同一個(gè)連續的內存區域中分配的,而不是像傳統的操作系統那樣將??臻g和堆空間分開(kāi)來(lái)管理。這種方式可以減少內存碎片的產(chǎn)生,提高內存利用率和系統性能。同時(shí),由于??臻g和堆空間是在同一個(gè)連續的內存區域中分配的,因此也方便了任務(wù)之間的通信和數據共享。

總之,FreeRTOS采用了一種先進(jìn)的內存管理方式,通過(guò)基于優(yōu)先級的搶占式多任務(wù)調度機制和就地內存管理方式,實(shí)現了高效、穩定、可靠的內存管理和任務(wù)調度功能。這些特性使得FreeRTOS成為了嵌入式系統開(kāi)發(fā)中最常用的實(shí)時(shí)操作系統之一。

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

    關(guān)注

    8

    文章

    1330

    瀏覽量

    113892
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    474

    瀏覽量

    61478
  • 實(shí)時(shí)操作系統

    關(guān)注

    1

    文章

    184

    瀏覽量

    30594
  • 動(dòng)態(tài)內存
    +關(guān)注

    關(guān)注

    1

    文章

    24

    瀏覽量

    7942
  • 靜態(tài)內存
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1365
收藏 人收藏

    評論

    相關(guān)推薦

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

    你可能會(huì )好奇:FreeRTOS可以創(chuàng )建任務(wù),也可以刪除任務(wù),它是動(dòng)態(tài)分配的內存嗎?
    的頭像 發(fā)表于 03-24 09:55 ?1883次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>是動(dòng)態(tài)分配嗎?

    闡述FreeRTOS系統中的機制及在應用中的優(yōu)缺點(diǎn)

    FreeRTOS是一個(gè)源碼公開(kāi)的免費的嵌入式實(shí)時(shí)操作系統,通過(guò)研究其內核可以更好地理解嵌入式操作系統的實(shí)現原理.本文主要闡述FreeRTOS系統中的任務(wù)調度機制、時(shí)間管理機制、任務(wù)管
    發(fā)表于 12-20 06:34

    闡述FreeRTOS系統中機制的實(shí)現原理

    2--嵌入式操作系統FreeRTOS的原理與實(shí)現摘自::FreeRTOS是一個(gè)源碼公開(kāi)的免費的嵌入式實(shí)時(shí)操作系統,通過(guò)研究其內核可以更好地理解嵌入式操作系統的實(shí)現原理.本文主要闡述FreeRTOS系統中的任務(wù)調度
    發(fā)表于 12-22 07:15

    STM32內存結構介紹和FreeRTOS內存分配技巧

    STM32內存結構介紹和FreeRTOS內存分配技巧這是我第一次使用FreeRTOS構建STM32的項目,踩了好些坑,又發(fā)現了我缺乏對于操作系統的
    發(fā)表于 02-14 07:38

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

    內存管理是一個(gè)操作系統的重要組成部分之一,所有應用程序都離不開(kāi)操作系統的內存管理。因此,在剖析FreeRTOS的內核代碼之前,前對FreeRTOS
    發(fā)表于 02-09 05:25 ?801次閱讀
    <b class='flag-5'>FreeRTOS</b>代碼剖析之1:<b class='flag-5'>內存</b>管理Heap

    SDRAM內存詳解資料

    SDRAM內存詳解資料
    發(fā)表于 10-30 15:45 ?8次下載
    SDRAM<b class='flag-5'>內存</b><b class='flag-5'>詳解</b>資料

    FreeRTOS基礎知識詳解pdf下載

    FreeRTOS基礎知識詳解
    發(fā)表于 03-29 14:36 ?45次下載

    嵌入式操作系統FreeRTOS內存如何管理和堆

    嵌入式操作系統FreeRTOS內存管理和堆
    的頭像 發(fā)表于 01-10 15:17 ?4392次閱讀
    嵌入式操作系統<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>如何管理和堆

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

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

    FreeRTOS高級篇7---FreeRTOS內存管理分析

    FreeRTOS操作系統將內核與內存管理分開(kāi)實(shí)現,操作系統內核僅規定了必要的內存管理函數原型,而不關(guān)心這些內存管理函數是如何實(shí)現的。這...
    發(fā)表于 01-26 17:36 ?7次下載
    <b class='flag-5'>FreeRTOS</b>高級篇7---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>管理分析

    FreeRTOS系列第8篇---FreeRTOS內存管理

    本文介紹內存管理的基礎知識,詳細源碼分析見(jiàn)《 FreeRTOS高級篇7---FreeRTOS內存管理分析》
    發(fā)表于 01-26 17:56 ?17次下載
    <b class='flag-5'>FreeRTOS</b>系列第8篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>管理

    FreeRtos入門(mén)手冊中文版

    全中文FreeRtos詳解,學(xué)習入門(mén)精通。
    發(fā)表于 06-02 11:13 ?0次下載

    FreeRTOS內存管理簡(jiǎn)介

    ,比如任務(wù)創(chuàng )建函數 xTaskCreateStatic(),使用此函數創(chuàng )建任務(wù)的時(shí)候需要由用戶(hù)定義任務(wù)堆棧,我們不討論這種靜態(tài)方法。 使用動(dòng)態(tài)內存管理的時(shí)候 FreeRTOS 內核在創(chuàng )建任務(wù)、隊列、信號量的時(shí)候會(huì )動(dòng)態(tài)的申請 RAM。標準 C 庫中的 malloc()和 f
    的頭像 發(fā)表于 07-30 10:26 ?490次閱讀

    FreeRTOS內存碎片是怎么來(lái)的

    內存碎片 在看 FreeRTOS內存分配方法之前我們先來(lái)看一下什么叫做內存碎片,看名字就知道是小塊的、碎片化的內存。那么
    的頭像 發(fā)表于 07-30 10:29 ?612次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>碎片是怎么來(lái)的

    FreeRTOS內存管理實(shí)現

    FreeRTOS是一個(gè)為嵌入式系統設計的開(kāi)源實(shí)時(shí)操作系統。它提供了一個(gè)多任務(wù)內核和一系列功能,適合在資源受限的設備上管理實(shí)時(shí)任務(wù)和應用程序。FreeRTOS內存管理的關(guān)鍵方面之一是堆管理。
    的頭像 發(fā)表于 10-10 16:17 ?597次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>內存</b>管理實(shí)現
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看