⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem_api.h

📁 mem_lib,arm9的内存管理系统
💻 H
字号:
/*
 * @(#)Ram.h
 * @date 2005/12/25
 * @version 1.0
 * @author Zhou Shangpin.
 * Copyright 2005 Anyka corporation, Inc. All rights reserved.
 * ANYKA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */


#ifndef		_MEMORY_H_
#define		_MEMORY_H_
#include	"aktypes.h"

T_U8* Ram_Alloc(T_U32 size
#ifdef _MEMORY_DEBUG_				
,T_U8* FileName, T_U32 line
#endif
);
T_U8* Ram_Realloc(T_pVOID ptr, T_U32 size
#ifdef	_MEMORY_DEBUG_
	,T_U8* FileName, T_U32 line
#endif
);
T_VOID Ram_Initial(T_U8* ptr, T_U32 size);
T_U32 Ram_GetMaxFree(T_VOID);
T_U32 Ram_GetPtrValue(T_VOID);
T_U32 Ram_GetPieceValue(T_VOID);
T_U32 Ram_GetSpaceValue(T_VOID);
T_U32 Ram_GetMaxBlock(T_VOID);
T_U32 Ram_GetPtrNum(T_VOID);
T_U32 Ram_Used(T_VOID);
T_U32 Ram_Remain(T_VOID);
T_U32 Ram_Total(T_VOID);
typedef enum
{
	COMP_EQUAL,
	COMP_GREAT,
	COMP_LESS	
}E_COMPARE;

#define		MEM_BLOCK_LEN	32

#define		MUL_BLOCK_LEN(num)	((num)<<5)
#define		DIV_BLOCK_LEN(num)	((num)>>5)

struct MemDebug
{
	T_U8* FileName;
	T_U32 LineNum;
};

typedef	struct MemDebug		T_MEMDEBUG;
typedef	struct MemDebug*	T_PMEMDEBUG;

struct MemBlockHead
{
	T_U32	BlockNum;
	T_U32	PrevBlock;
#ifdef	_MEMORY_DEBUG_
	T_MEMDEBUG	debug;		
#endif
};


typedef	struct MemBlockHead	T_MEMBLOCK;
typedef	struct MemBlockHead* T_PMEMBLOCK;
#define	HEAD_BLOCK_LEN	((sizeof(T_MEMBLOCK) + MEM_BLOCK_LEN - 1) / MEM_BLOCK_LEN)
#define	BLOCK_TO_PTR(block)	((T_U8*)(gRam.start + MUL_BLOCK_LEN(block)))
#define	BLOCK_TO_HEAD(block) ((T_PMEMBLOCK)(gRam.start + MUL_BLOCK_LEN(block)))

#define	HEAD_TO_BLOCK(pBlock) (DIV_BLOCK_LEN(  ((T_U8*)pBlock) - gRam.start ))

#define	PTR_TO_HEAD(ptr)	((T_PMEMBLOCK)(ptr))
#define	PTR_TO_BLOCK(ptr)	((T_U32)(DIV_BLOCK_LEN((T_U8*)ptr - gRam.start)))

struct Memory
{
	T_U8*		start;				//start of dump.
	T_U32		TotalBlockNum;		//dump length.
	
	T_U32		UsedBlockNum;		//have allocated memory space.
	T_U32		MaxUsedBlock;		//max of UsedBlockNum

	T_U32		MallocPtrNum;		//hanve allocated pointer number.
	T_U32		MaxPtrNum;			//max of MallocPtrNum

	T_U32		MaxFreeLen;			//Max free block in dump
	T_U32		MinFreeValue;		//min of MaxFreeLen

	T_U32		LastMallocBlock;	//last allocated block.
};

typedef	struct Memory		T_MEMORY;
typedef	struct Memory*		T_PMEMORY;

//block operate.
T_VOID Ram_Move(T_pVOID dest, T_pVOID source, T_U32 count);
T_VOID Ram_Set(T_VOID* dest, T_U8 chr, T_U32 count);
E_COMPARE Ram_Cmp(T_VOID* dest, T_VOID* source, T_U32 count);
T_U32 Ram_StrCmp(T_U8* dest, T_U8* source);

//dump operate.
T_VOID Ram_Initial(T_U8* ptr, T_U32 size);
T_U32 Ram_GetMaxFree(T_VOID);
T_U32 Ram_GetPtrValue(T_VOID);
T_U32 Ram_GetPieceValue(T_VOID);
T_U32 Ram_GetSpaceValue(T_VOID);
T_U32 Ram_GetMaxBlock(T_VOID);
T_U32 Ram_GetPtrNum(T_VOID);
T_U32 Ram_Used(T_VOID);
T_U32 Ram_Remain(T_VOID);
T_U32 Ram_Total(T_VOID);


//pointer operate.
T_U32 Ram_SizeOf(T_pVOID ptr);						 
T_pVOID Ram_Free(T_pVOID ptr);

//debug operate.
T_BOOL Ram_ChkLink(T_VOID);
T_BOOL Ram_ChkPtr(T_VOID * ptr);

extern T_MEMORY	gRam;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -