嵌入式 記憶體分配管理

2021-09-01 02:56:23 字數 1799 閱讀 1290

嵌入式---記憶體分配管理

嵌入式的記憶體一般都非常的小,最進在學習lwip協議棧的移植,在正點原子的學習資料中找到了許多關於怎麼移植協議棧的東西,其中使用到了記憶體的分配管理技術,能夠高效的管理和使用記憶體,學習之後整理了放在這裡。

一、記憶體分配管理函式

函式名函式說說明

輸入、輸出

memory_int( )

記憶體分配初始化

無、無memory_perused(u8 memx)

記憶體使用率

menx-->記憶體源

* memory_malloc(u8 memx,u32 size)

記憶體分配函式

返回記憶體塊指標

void memory_free(u8 memx,void xptr)

記憶體釋放函式

xptr-->釋放的記憶體頭指標

二、記憶體分配示意圖

三、函式編寫

記憶體管理器

struct _m_mallco_dev

void (*mem_init)(void);

u8 (*mem_perused)(void);

u8 *membase[srambank];

u16 *memmap[srambank];

u8 memrdy[srambank];

1、init,函式指標,指向記憶體初始化函式。

2、peruserd,函式指標,指向記憶體使用率函式。

3、membase,記憶體池指標,srambank配置的池子個數。

4、menmap,記憶體管理表指標,指向記憶體管理表。多少個池子,就有多少個記憶體管理表。

5、memrdy,記憶體管理就緒標誌。

6、srambank記憶體塊片數。

記憶體管理巨集定義

#define sramin      0               //內部記憶體池

#define srmbank    1                //定義支援的sram塊數

#define mem_block_size     32       //記憶體塊大小

#define mem_max_size   42*1024      //記憶體池大小

#define mem_alloc_table_size  mem_max_size/mem_block_size //記憶體表大小。

記憶體管理陣列引數

_align(4) u8 membase[mem_max_size];   //記憶體池(4位元組對齊),利用陣列開闢空間

u16 memmap[mem_alloc_table_sizre]; //記憶體池map

const u32 memtblsize= mem_alloc_table_size;   //記憶體表大小

const u32 memblksize= mem_block_size;         //記憶體分塊大小

const u32 memsize= mem_max_size;             //記憶體總大小

記憶體管理控制器的初始化

struct _m_mallco_dev mallco_dev =

mem_init;      //記憶體初始化

mem_perused;   //記憶體使用率

membase;     //記憶體池

memmap;      //記憶體管理狀態表

0 ;            //記憶體管理未就緒

嵌入式系統 記憶體管理

教材 嵌入式系統及應用,羅蕾 李允 陳麗蓉等,電子工業出版社 嵌入式實時作業系統在記憶體管理方面需要考慮如下因素 快速而確定的記憶體管理 通常的作業系統都至少具有基本的記憶體管理方法 提供記憶體分配與釋放的系統呼叫 不使用虛擬儲存技術 在嵌入式實時作業系統中一般不使用虛擬儲存技術,以避免頁面置換所帶...

嵌入式記憶體布局

從事手機平台研發也有一年多了,總結了一下有關手機記憶體方面的知識希望對新手有所裨益。如果有高手路過檢視之餘如有紕漏之處還請不吝賜教 說明 傳統 燒機 流程將軟體燒錄到flash中,軟體bootloader部分在nor flash中,軟體的其他部分燒錄到nand flash 強調一點 上圖左邊部分是f...

嵌入式作業系統 記憶體管理

嵌入式系統中的記憶體管理,主要用於實現記憶體的動態申請 釋放 在嵌入式作業系統中,使用malloc free這兩個函式會產生記憶體碎片 並且這兩個函式的執行時間存在不確定性 爭取對以下嵌入式作業系統的記憶體管理機制有一定的認識 1 uc os上使用的記憶體管理機制 2 典型值的記憶體管理機制 3 基...