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

📄 fastmem.c

📁 arm9开发板上的例子,可以学习一下有简单的c程序
💻 C
字号:
/****************************************************************************//* *	fastmem.c -- Simple routines to access fast memory. * *	(C) Copyright 2002, Greg Ungerer (gerg@snapgear.com) *//****************************************************************************/#include <stdio.h>#include <stdlib.h>#include "../myhead.h"#include "fastmem.h"/****************Table in sram****************/#ifdef SRAM_OPT_TABLEvoid	*sram_table_base = (void *)SRAM_TABLE_OFFSET;size_t	sram_table_alloced;void * table_apply_sram(int size){	void *p;	int i;	p = sram_table_base;	sram_table_base += size;	sram_table_alloced += size;	if(sram_table_alloced > SRAM_TABLE_MAXLEN){		fprintf(stderr, "sram table overflowed!\n");		exit(-1);	}	PDEBUG("sram table allocated:%d\n", sram_table_alloced);	return (p);}void get_sram_table_info(void **p, int *alloced){	*p = (void *)SRAM_TABLE_OFFSET;	*alloced=sram_table_alloced;}#endif/****************Fast buffer****************/#ifdef SRAM_OPT_BUFvoid	*sram_buf_base = (void *)SRAM_BUF_OFFSET;size_t	sram_buf_alloced;void *sram_alloc_buf(size_t size){	void *p;	int i;	p = sram_buf_base;	sram_buf_base += size;	sram_buf_alloced += size;	if(sram_buf_alloced > SRAM_BUF_MAXLEN){		fprintf(stderr, "sram buffer overflowed!\n");		exit(-1);	}	PDEBUG("sram buffer:0x%p, allocated size:%d\n", p, sram_buf_alloced);	return(p);}void get_sram_buf_info(void **p, int *alloced){	*p = (void*)SRAM_BUF_OFFSET;	*alloced=sram_buf_alloced;}#endif/****************Fast malloc****************/#ifdef SRAM_OPT_HEAP#define	MAXALLOCS	24	struct atable {	int	alloced;	void	*p;	size_t	size;};struct atable	fmem_alloctable[MAXALLOCS];int		fmem_atablei;void	*fmem_base = (void *)SRAM_OFFSET_BEGIN;size_t	fmem_alloced;void *fmalloc(size_t size){	void *p;	int i;	/* See if exact match already */	for (i = 0; (i < MAXALLOCS); i++) {		if (size == fmem_alloctable[i].size) {			if (fmem_alloctable[i].alloced == 0) {				fmem_alloctable[i].alloced = 1;				return(fmem_alloctable[i].p);			}		}	}	p = fmem_base;	fmem_base += size;	fmem_alloced += size;	fmem_alloctable[fmem_atablei].alloced = 1;	fmem_alloctable[fmem_atablei].size = size;	fmem_alloctable[fmem_atablei].p = p;	fmem_atablei++;	if(fmem_alloced > SRAM_HEAP_MAXLEN){		fprintf(stderr, "Heap overflowed!\n");		exit(-1);	}	return(p);}void ffree(void *ptr){	int i;	for (i = 0; (i < MAXALLOCS); i++) {		if (ptr == fmem_alloctable[i].p) {			fmem_alloctable[i].alloced = 0;			return;		}	}	//free(ptr);}void get_sram_heap_info(void **p, int *alloced){	*p = (void*)SRAM_OFFSET_BEGIN;	*alloced=fmem_alloced;}#else	void *fmalloc(size_t size){	return(malloc(size));}void ffree(void *ptr){	free(ptr);}#endif /* SRAM_OPT_HEAP */void print_sram_usage(){	int size;	void *p;	printf("---------------------\n");	printf("SRAM usage(Address:0x%x, Total length:0x%x):\n", SRAM_OFFSET_BEGIN, SRAM_LENGTH);#ifdef SRAM_OPT_HEAP	get_sram_heap_info(&p, &size);	printf("\tHeap usage: \t%p-%p\t\t0x%x\n", p, p+size, size);#endif#ifdef MOV_SP	printf("\tStack usage: \t%p-%p\t\t0x%x\n", (void*)SRAM_STACK_OFFSET, (void*)SRAM_STACK_OFFSET+SRAM_STACK_MAXLEN, SRAM_STACK_MAXLEN);#endif#ifdef SRAM_OPT_TABLE	get_sram_table_info(&p, &size);	printf("\tTable usage: \t%p-%p\t\t0x%x\n", p, p+size, size);#endif#ifdef SRAM_OPT_BUF	get_sram_buf_info(&p, &size);	printf("\tBuffer usage: \t%p-%p\t\t0x%x\n", p, p+size, size);#endif#ifdef MOV_FUNC	printf("\tFunc usage: \t%p-%p\t\t0x%x\n", (void*)SRAM_FUNC_OFFSET, (void*)SRAM_FUNC_OFFSET+SRAM_FUNC_MAXLEN, SRAM_FUNC_MAXLEN);#endif}

⌨️ 快捷键说明

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