嵌入式---記憶體分配管理
嵌入式的記憶體一般都非常的小,最進在學習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 基...