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

📄 alc_mem.c

📁 itron
💻 C
字号:
/* ------------------------------------------------------------------------ */
/*  Hyper Operating System V4  μITRON4.0慌屯 Real-Time OS                  */
/*    カ〖ネルメモリ瓷妄                                                    */
/*                                                                          */
/*                                  Copyright (C) 1998-2002 by Project HOS  */
/*                                  http://sourceforge.jp/projects/hos/     */
/* ------------------------------------------------------------------------ */



#include "knl_mem.h"



/* メモリの充り碰て */
VP kernel_alc_mem(
		SIZE size)		/* 艰评する挝拌のサイズ */
{
	T_KERNEL_MEM_BLK *mblk;
	T_KERNEL_MEM_BLK *mblk_next;
	
	/* ヒ〖プの赂哼チェック */
	if ( kernel_mem_base == NULL )
	{
		return NULL;
	}
	
	/* サイズのアライメントを拇腊 */
	size = (size + MEMBLK_ALIGN - 1) & ~(MEMBLK_ALIGN - 1);
	
	/* 鄂き挝拌を浮瑚 */
	mblk = kernel_mem_base;
	while ( mblk->size != 0 )
	{
		if ( mblk->flag == MEMBLK_FREE && mblk->size >= size )
		{
			/* 浇尸な推翁があったら */
			if ( mblk->size - size > MEMBLKSIZE + MEMBLK_ALIGN )
			{
				/* ブロックを尸充する */
				mblk_next = (T_KERNEL_MEM_BLK *)((UB *)mblk + MEMBLKSIZE + size);
				mblk_next->prev = mblk;
				mblk_next->size = mblk->size - size - MEMBLKSIZE;
				mblk_next->flag = MEMBLK_FREE;
				mblk->size      = size;
			}
			mblk->flag = MEMBLK_USING;
			
			return (VP)((UB *)mblk + MEMBLKSIZE);
		}
		
		/* 肌のブロックへ渴む */
		mblk = (T_KERNEL_MEM_BLK *)((UB *)mblk + mblk->size + MEMBLKSIZE);
	}

	return NULL;	/* 鄂きが痰い */
}


/* ------------------------------------------------------------------------ */
/*  Copyright (C) 1998-2002 by Project HOS                                  */
/* ------------------------------------------------------------------------ */

⌨️ 快捷键说明

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