国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片

這篇具有很好參考價值的文章主要介紹了如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

如何剪裁操作系統(tǒng)源碼

本文面向的需求場景是,為缺乏標準庫實現(xiàn)的處理器IP移植內(nèi)存管理模塊,即為裸片部署C標準庫中的 malloc()free() 函數(shù)。

具體做法是——從操作系統(tǒng)的內(nèi)存管理組件中剪裁出必要的源碼,適配到目標處理器的開發(fā)環(huán)境(SDK/IDE/CMAKE工程子目錄)中。

1 定需求——理解內(nèi)存管理/堆管理

1.1 C標準庫中的內(nèi)存管理方案

C標準庫提供了一組內(nèi)存管理函數(shù),用于在C程序中進行動態(tài)內(nèi)存分配和釋放操作。這些函數(shù)主要包括malloc、calloc、realloc和free。

malloc函數(shù): malloc函數(shù)用于分配指定大小的內(nèi)存塊,并返回指向該內(nèi)存塊的指針。其函數(shù)原型為:

void* malloc(size_t size);

它接受一個參數(shù)size,表示需要分配的內(nèi)存空間的大?。ㄒ宰止?jié)為單位)。malloc函數(shù)在堆內(nèi)存中分配了一塊連續(xù)的內(nèi)存,并返回指向該內(nèi)存塊起始地址的指針。

calloc函數(shù): calloc函數(shù)也用于分配指定數(shù)量和大小的內(nèi)存塊,并返回指向該內(nèi)存塊的指針。與malloc不同的是,calloc會將分配的內(nèi)存塊中的每個字節(jié)都初始化為0。其函數(shù)原型為:

void* calloc(size_t num, size_t size);

num參數(shù)表示需要分配的元素個數(shù),而size參數(shù)表示每個元素的大?。ㄒ宰止?jié)為單位)。calloc函數(shù)在堆內(nèi)存中分配了大小為num * size的內(nèi)存塊,并返回指向該內(nèi)存塊起始地址的指針。

realloc函數(shù): realloc函數(shù)用于調(diào)整先前分配的內(nèi)存塊的大小。其函數(shù)原型為:

void* realloc(void* ptr, size_t size);

ptr參數(shù)是指向先前通過malloc或calloc分配的內(nèi)存塊的指針,而size參數(shù)表示需要調(diào)整的大?。ㄒ宰止?jié)為單位)。realloc函數(shù)根據(jù)新的大小重新分配內(nèi)存塊,并返回指向重新分配后內(nèi)存塊起始地址的指針。如果內(nèi)存塊不能被重新分配,realloc函數(shù)可能會創(chuàng)建新的內(nèi)存塊,并將原內(nèi)存塊的數(shù)據(jù)復制到新內(nèi)存塊中。

free函數(shù): free函數(shù)用于釋放先前通過malloc、calloc或realloc函數(shù)分配的內(nèi)存塊。其函數(shù)原型為:

void free(void* ptr);

ptr參數(shù)是指向先前分配的內(nèi)存塊的指針。通過調(diào)用free函數(shù),該內(nèi)存塊將被標記為空閑,并可以被再次分配給其他內(nèi)存需求。

1.2 需求剪裁

裸片程序受限于內(nèi)存資源,一般是使用靜態(tài)分配方法設(shè)計得到的,只在移植某些外設(shè)的驅(qū)動時需要提供基本的動態(tài)內(nèi)存管理方法,很少有新增預分配的動態(tài)內(nèi)存的需求。所以 realloccalloc 函數(shù)可以略去,這樣咱的任務量就減少了一半啦。

2 找輪子——向操作系統(tǒng)學習

操作系統(tǒng)是對硬件的抽象,裸片上的絕大部分需求都可以在操作系統(tǒng)的源碼中找到較為通用的實現(xiàn),那么何必再造輪子呢,直接逮著操作系統(tǒng)的薅羊毛吧。

2.1 FreeRTOS中的內(nèi)存管理方案

FreeRTOS 提供了幾種堆管理方案,這些方案的復雜性和功能各不相同,分別適用于不同的需求場景,具體見下圖。
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
總結(jié)性地說,F(xiàn)reeRTOS在源碼目錄 Source/Portable/MemMang 中為咱們提供了 5 種可選的內(nèi)存管理模塊的實現(xiàn):

  • heap_1:極簡版,不支持內(nèi)存釋放(沒有 free 函數(shù))
  • heap_2:支持釋放,但不合并釋放的內(nèi)存塊
  • heap_3:支持線程安全的 malloc 和 free 函數(shù)
  • heap_4:合并釋放的內(nèi)存塊,避免內(nèi)存碎片
  • heap_5:在 4 的基礎(chǔ)上支持跨多個內(nèi)存塊進行分配

這兒咱們根據(jù)自己的需求選,本文選擇 heap_2 移植,因為基本功能全面,且足夠簡單。

2.2 拉取源碼

在源碼樹中找到 Source/Portable/MemMang/heap2.c,如下圖。
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
打開就看到分配和釋放函數(shù)觸手可及,分別命名為 pvPortMallocvPortFree, 添加到咱的工程里,然后細看這個源文件的依賴,把依賴項從源碼樹里摳出來,舍棄不需要的文件,也就把內(nèi)存管理模塊從操作系統(tǒng)中剝離出來了。

2.3 剝離依賴項

heap_2.c包含了兩個FreeRTOS相關(guān)的頭文件—— FreeRTOS.h 和 task.h,后者是任務調(diào)度器相關(guān)的聲明,咱們顯然不需要,直接剔除。FreeRTOS是一些配置項的宏定義,咱們把與內(nèi)存管理相關(guān)的剪切過來,不需要保留FreeRTOS.h整個文件。

如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式

然后是一個用于讓管理的內(nèi)存空間大小符合內(nèi)存對齊需求的宏定義:

/* A few bytes might be lost to byte aligning the heap start address. */
#define configADJUSTED_HEAP_SIZE    ( configTOTAL_HEAP_SIZE - portBYTE_ALIGNMENT )

configTOTAL_HEAP_SIZE 和 portBYTE_ALIGNMENT 都需要我們手動 #define
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
heap_2.c 還用到一個宏定義 portBYTE_ALIGNMENT_MASK
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
原先在FreeRTOS.h里,我們加到portmacro.h里:
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
剩下的就是一些基本的類型替換了,我們統(tǒng)一放到 portmacro.h 文件中:
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式
projdefs.h 也是需要的,里面有 truefalse 的宏:
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式

2.4 可用源碼

Github倉庫:memManPort

3 測試

可以用下面這個demo來測試移植結(jié)果的可用性,只要pb和pc值結(jié)果一致,那就基本正確了。
如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片,從物理定律到編程語言,arm,內(nèi)存管理,操作系統(tǒng),嵌入式文章來源地址http://www.zghlxwxcb.cn/news/detail-638065.html

到了這里,關(guān)于如何剪裁操作系統(tǒng)源碼——移植FreeRTOS的內(nèi)存管理模塊到ARMV8裸片的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • LWIP——無操作系統(tǒng)移植

    LWIP——無操作系統(tǒng)移植

    目錄 移植說明 LwIP前期準備 ?以太網(wǎng)DMA描述符 LwIP移植流程 添加網(wǎng)卡驅(qū)動程序 添加LwIP源文件 ?移植頭文件 網(wǎng)卡驅(qū)動編寫 移植總結(jié)? LwIP的移植可以分為兩大類:第一類是只移植內(nèi)核核心,此時用戶應用程序編寫只能基于RaW/CallBack API進行;第二類是移植內(nèi)核核心和上層API函數(shù)

    2024年02月12日
    瀏覽(15)
  • FreeRTOS實時操作系統(tǒng)(六)列表與列表項

    FreeRTOS實時操作系統(tǒng)(六)列表與列表項

    FreeRTOS實時操作系統(tǒng)(一)RTOS的基本概念 FreeRTOS實時操作系統(tǒng)(二)任務創(chuàng)建與任務刪除(HAL庫) FreeRTOS實時操作系統(tǒng)(三)任務掛起與恢復 FreeRTOS實時操作系統(tǒng)(四)中斷任務管理 FreeRTOS實時操作系統(tǒng)(五)進入臨界區(qū)、任務調(diào)度器掛起與恢復 FreeRTOS實時操作系統(tǒng)(六)列

    2024年02月10日
    瀏覽(20)
  • LwIP帶操作系統(tǒng)的移植

    LwIP帶操作系統(tǒng)的移植

    目錄 LwIP移植前期準備 LwIP移植流程 修改lwipopts.h 修改lwip_comm.c文件 修改ethernetif.c/h文件 修改ethernetif_input函數(shù) 修改ethernet.c文件 添加應用程序 LwIP是支持操作系統(tǒng)的,在操作系統(tǒng)的支持下我們可以使用LwIP提供的另外兩種API編程接口編程。沒有操作系統(tǒng)的時候,我們只能使用R

    2024年02月07日
    瀏覽(15)
  • 簡單介紹STM32上的FreeRTOS實時操作系統(tǒng)

    FreeRTOS是一款廣泛使用的開源實時操作系統(tǒng)(RTOS),它為嵌入式系統(tǒng)提供了可靠的任務調(diào)度和并發(fā)管理。在嵌入式領(lǐng)域中,STM32微控制器廣受歡迎,并且與FreeRTOS的結(jié)合使用可以提供強大的功能和靈活性。在本篇博客中,我們將深入探究STM32上的FreeRTOS,并了解其核心概念、任

    2024年02月16日
    瀏覽(33)
  • FreeRTOS實時操作系統(tǒng)(十五)Tickless低功耗模式

    FreeRTOS實時操作系統(tǒng)(十五)Tickless低功耗模式

    FreeRTOS實時操作系統(tǒng)(一)RTOS的基本概念 FreeRTOS實時操作系統(tǒng)(二)任務創(chuàng)建與任務刪除(HAL庫) FreeRTOS實時操作系統(tǒng)(三)任務掛起與恢復 FreeRTOS實時操作系統(tǒng)(四)中斷任務管理 FreeRTOS實時操作系統(tǒng)(五)進入臨界區(qū)、任務調(diào)度器掛起與恢復 FreeRTOS實時操作系統(tǒng)(六)列

    2024年02月16日
    瀏覽(19)
  • STM32初學者入門FreeRTOS操作系統(tǒng),多任務實時系統(tǒng)

    STM32初學者入門FreeRTOS操作系統(tǒng),多任務實時系統(tǒng)

    ? ? ? ? FreeRTOS(Free Real-Time Operating System)是一個開源的嵌入式實時操作系統(tǒng),它專門設(shè)計用于在資源有限的嵌入式系統(tǒng)中運行。FreeRTOS提供了一些用于任務管理、調(diào)度、同步和通信的功能,使開發(fā)者能夠輕松地創(chuàng)建可靠的嵌入式系統(tǒng)。 以下是FreeRTOS的一些特點和功能: 輕量

    2024年02月11日
    瀏覽(27)
  • STM32操作系統(tǒng)FreeRTOS學習——基于hal庫

    STM32操作系統(tǒng)FreeRTOS學習——基于hal庫

    目錄 一、基礎(chǔ)概念 1、FreeRTOS 2、單片機編程的系統(tǒng)概念 a、裸機系統(tǒng),包括輪詢系統(tǒng)(不包括中斷)和前后臺系統(tǒng)(中斷為前臺,輪詢?yōu)楹笈_) b、多任務系統(tǒng) 3、FreeRTOS編程風格 a、數(shù)據(jù)類型 b、變量名的定義 c、函數(shù)名 d、宏定義 二、Cubemx創(chuàng)建工程 1、創(chuàng)建任務 2、創(chuàng)建隊列

    2024年02月10日
    瀏覽(41)
  • 【STM32】STM32 移植鴻蒙操作系統(tǒng)

    【STM32】STM32 移植鴻蒙操作系統(tǒng)

    隨著 OpenHarmony3.1 的正式發(fā)布,其功能也在不斷完善。OpenHarmony LiteOS-M 內(nèi)核是面向IoT領(lǐng)域構(gòu)建的輕量級物聯(lián)網(wǎng)操作系統(tǒng)內(nèi)核,具有小體積、低功耗、高性能的特點,其代碼結(jié)構(gòu)簡單,主要包括內(nèi)核最小功能集、內(nèi)核抽象層、可選組件以及工程目錄等,分為硬件相關(guān)層以及硬件無

    2024年02月09日
    瀏覽(14)
  • ARM-M架構(gòu)移植UCOS操作系統(tǒng)

    ARM-M架構(gòu)移植UCOS操作系統(tǒng)

    ????????最近準備面試,把本科到現(xiàn)在的一些比賽相關(guān)的東西整理一下。那些年在飛思卡爾在K60單片機上的UCOSII移植(哎,心酸...) ? ? ? ? 一、首先看下UCOSII的文件結(jié)構(gòu): 一些核心的文件解釋: ? ? ? ? 【1、頭文件】: ????? ???includes.h :每個.c文件需要包含的頭

    2024年02月11日
    瀏覽(15)
  • STM32基于HAL庫和STM32CubeMX的實時操作系統(tǒng)FreeRtOS開發(fā)

    STM32基于HAL庫和STM32CubeMX的實時操作系統(tǒng)FreeRtOS開發(fā)

    1、FreeRTOS RTOS是一類操作系統(tǒng),μC/OS,F(xiàn)reeRTOS,RTX,RT-Thread 等這些都是RTOS 類的操作系統(tǒng) FreeRTOS 是眾多RTOS 類操作系統(tǒng)中的一種,F(xiàn)reeRTOS 十分的小巧,可以在資源有限的微控制器中運行,F(xiàn)reeRTOS 也不僅僅局限于在微控制器中使用。就單從文件數(shù)量上來看FreeRTOS 要比μC/OS 少得多

    2024年02月21日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包