亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? memory_management.cpp

?? 擴展的動態(tài)內(nèi)存機制 任務綜述 本任務擴展了自己私有的內(nèi)存管理機制。首先使用預先規(guī)劃的思想
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "vxworks.h"
#include "stdio.h"
#include "semlib.h"
#include "tasklib.h"
#include "msgQLib.h"
#include "logLib.h"

/* 參數(shù)定義 */
#define MAX_BUF_NUM		256				/* 內(nèi)存池消息隊列最大內(nèi)存?zhèn)€數(shù)*/
#define STACK_SIZE		20000				/* 任務堆棧大小 */
#define MAX_LOG_MSGS	100					/* 最大logMsg個數(shù) */
#define MAX_ALLOC_NUM   50					/* 一次申請最多*/



/* 全局變量的定義 */
unsigned int alloc_num_Buffer_16, alloc_num_Buffer_256;		/* 預先設置16和256的緩沖池大小 */

char *pbuf16_store[256];					/* 用來存放已經(jīng)申請的16內(nèi)存塊地址 */
int buf_16_num = 0;

char *pbuf256_store[256];					/* 用來存放已經(jīng)申請的256內(nèi)存塊地址 */
int buf_256_num = 0;

char *pbufsys_store[256];					/* 用來存放已經(jīng)申請的系統(tǒng)內(nèi)存塊地址 */
int buf_sys_num = 0;



/* 消息隊列ID */
MSG_Q_ID msgQId_pool16;						/* 存放靜態(tài)16內(nèi)存池塊地址的消息隊列 */
MSG_Q_ID msgQId_pool256;					/* 存放靜態(tài)256內(nèi)存池塊地址的消息隊列 */

/* 消息結(jié)構(gòu) */
typedef struct _PBUFFER
{
	char *buffer;
}PBUFFER;


/* 內(nèi)存分區(qū)ID */
char *pTotalPool;
PART_ID pPart16;
PART_ID pPart256;


/* LogMsg */
#ifdef INCLUDE_LOGGING
logInit(consolefd, MAX_LOG_MSGS);
#endif

/* 任務標識 */
int tidTask1;

/* 互斥信號量標識 */
SEM_ID semId = NULL;						/* 保證臨界資源的安全 */


/* 函數(shù)聲名 */
STATUS tTask1();							/* 任務1 */
STATUS Total_MemPool_Initial();				/* 初始化靜態(tài)內(nèi)存池函數(shù) */
STATUS bufGet(unsigned int &alloc_buf_size, unsigned int &alloc_num);	/* 申請內(nèi)存塊函數(shù) */
STATUS bufReturn(unsigned int &buffer_type,unsigned int &free_num);		/* 釋放內(nèi)存塊函數(shù) */
STATUS bufStatus();														/* 查看內(nèi)存使用情況函數(shù) */
STATUS exit();															/* 系統(tǒng)退出函數(shù) */


/****************************************************************************/
/************************** 程序入口函數(shù) progStart **************************/
/****************************************************************************/

STATUS progStart(void)
{
	/* 創(chuàng)建互斥信號量 */
	semId = semBCreate(SEM_Q_FIFO,SEM_FULL);

	/* 創(chuàng)建內(nèi)存池消息隊列 */
	msgQId_pool16 = msgQCreate(MAX_BUF_NUM, sizeof(PBUFFER), MSG_Q_FIFO);	/* 16內(nèi)存緩沖池 */
	if(msgQId_pool16 == NULL)
		return (ERROR);

	msgQId_pool256 = msgQCreate(MAX_BUF_NUM, sizeof(PBUFFER), MSG_Q_FIFO);	/* 256內(nèi)存緩沖池 */
	if(msgQId_pool256 == NULL)
		return (ERROR);

	/* 創(chuàng)建進程 */
	tidTask1 = taskSpawn("tTask1", 200, 0, STACK_SIZE, (FUNCPTR)tTask1,	/*創(chuàng)建Task1進程 優(yōu)先級220*/
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

	return (OK);
}

/****************************************************************************/
/**************************** 系統(tǒng)主進程 tTask1 *****************************/
/****************************************************************************/

STATUS tTask1()
{
	int option;		/* 用戶選擇操作 */

	/* 調(diào)用初始化靜態(tài)內(nèi)存池函數(shù) */
	if(Total_MemPool_Initial() == ERROR)
	{
		printf("\nERROR: Memory pool failed to initialize.\n");
		return (ERROR);
	}

	FOREVER
	{
		/* 等待用戶選擇操作 */
		/* 操作1: Alloc Buffers -- 申請若干個自定義大小的內(nèi)存塊 */
		/* 操作2: Free Buffers  -- 釋放若干個自定義類型的內(nèi)存塊 */
		/* 操作3: Status	    -- 查看當前內(nèi)存池使用狀態(tài) */
		/* 操作4: Exit			-- 釋放內(nèi)存池并退出系統(tǒng) */
		printf("\nPlease choose your option: (1~4)\n1.\tAlloc Buffers\n2.\tFree buffers\n3.\tStatus\n4.\tExit\n");
		scanf("%d",&option);
		/* 判斷用戶輸入 */
		switch (option) {
			/* 如果選擇1 */
			case 1:
				/* 用戶輸入需要申請的內(nèi)存塊大小和個數(shù) */
				unsigned int alloc_buf_size;			/* 需要申請內(nèi)存塊大小 */
				unsigned int alloc_num;					/* 需要申請內(nèi)存塊個數(shù) */

				printf("Please Input the SIZE of the buffer to alloc:\n");
				scanf("%u",&alloc_buf_size);
				printf("Please Input the AMOUNT of buffers to alloc:\n");
				scanf("%u",&alloc_num);

				/* 調(diào)用bufGet()即申請內(nèi)存塊函數(shù) */
				if(bufGet(alloc_buf_size,alloc_num) == ERROR)
				{
					printf("\nERROR: Memory allocation Fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇2 */
			case 2:
				/* 用戶輸入需要釋放的內(nèi)存塊類型和個數(shù) */
				unsigned int buffer_type;				/* 釋放類型 */
				unsigned int free_num;					/* 釋放個數(shù) */
				printf("Please Input the TYPE of buffer to free:\n 1. 16_buffer\t2. 256_buffer\t3. system buffer\n");
				scanf("%u",&buffer_type);

				/* 如果是釋放系統(tǒng)內(nèi)存則默認全部刪除 */
				if(buffer_type == 1 || buffer_type == 2)
				{
					printf("Please Input the AMOUNT of buffers to free:\n");
					scanf("%u",&free_num);
				}
				/* 調(diào)用bufReturn()即內(nèi)存釋放函數(shù) */
				if(bufReturn(buffer_type, free_num) == ERROR)
				{
					printf("\nERROR: Memory Free Fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇3 */
			case 3:
				/* 調(diào)用bufStatus()即監(jiān)視函數(shù) */
				if(bufStatus()== ERROR)
				{
					printf("\nERROR: Status Check fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇4 */
			case 4:
				/* 調(diào)用系統(tǒng)退出函數(shù) */
				if(exit() == ERROR)
				{
					return (ERROR);
				}
				break;
			/* 其它 */
			default:
				printf("Wrong Input, Try again.\n");
				break;
		}
	}
	return (OK);
}

/****************************************************************************/
/******************** 功能函數(shù) Total_MemPool_Initial() **********************/
/****************************************************************************/

/* 實現(xiàn)功能: 根據(jù)用戶配置的大小初始化兩個不同類型的內(nèi)存池, */
/* 分別為大小為16和大小為256的內(nèi)存池,保存內(nèi)存池中各內(nèi)存    */
/* 塊的首地址,并發(fā)送到已經(jīng)創(chuàng)建的兩個內(nèi)存池消息隊列中.      */

STATUS Total_MemPool_Initial()
{
	/* 初始化參數(shù)和消息發(fā)送對象 */
	int Total_MemPool_Size;
	PBUFFER pBuff16_sd;
	PBUFFER pBuff256_sd;

	/* 提示用戶輸入兩種類型內(nèi)存池的大小 */
	printf("\n****************************Initialization*****************************\n");
	printf("Please Input the amount of 16 buffers.(3~256)\n");
	scanf("%d",&alloc_num_Buffer_16);
	printf("Please Input the amount of 256 buffers.(3~256)\n");
	scanf("%d",&alloc_num_Buffer_256);

	semTake(semId, WAIT_FOREVER);			/* 互斥信號量 */

	/* 初始化內(nèi)存池 */
	if(alloc_num_Buffer_16 >= 3 && alloc_num_Buffer_256 >= 3
		&& alloc_num_Buffer_16 <= MAX_BUF_NUM 
		&& alloc_num_Buffer_256 <= MAX_BUF_NUM)          /* 判斷輸入大小,合法為3~MAX_BUF_NUM個 */
	{
		/* 申請總內(nèi)存池pTotalPool */
		Total_MemPool_Size = (16+8) * alloc_num_Buffer_16 + (256+8) * alloc_num_Buffer_256 + 10000;
		pTotalPool = (char *)malloc(Total_MemPool_Size);
		
		/* 在總內(nèi)存池當中創(chuàng)建兩個分區(qū) */
		pPart16 = memPartCreate((char*)pTotalPool, (16+8) * alloc_num_Buffer_16);
		pPart256 = memPartCreate((char*)pTotalPool, (256+8) * alloc_num_Buffer_256 + 10000);

		/* 初始化塊大小為16的內(nèi)存池 */
		/* 在分區(qū)中分配內(nèi)存塊,并輸出地址 */
		printf("\n16_Buffer address:\n");		
		for(int i = 0; i < alloc_num_Buffer_16; ++i)
		{
			pBuff16_sd.buffer = (char*)memPartAlloc(pPart16, 16);
			printf("0x%07x\t",pBuff16_sd.buffer);
			if((i + 1) % 5 == 0)
				printf("\n");
			/* 將申請到的內(nèi)存塊地址發(fā)送到對應的內(nèi)存池消息對列中 */
			if(msgQSend(msgQId_pool16,(char*)&pBuff16_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
			{
				printf("Buffer 16 allocation failed.\n");
				return (ERROR);
			}
		}

		/* 初始化塊大小為256的內(nèi)存池 */
		/* 同上 */
		printf("\n256_Buffer address:\n");
		for(int j = 0; j < alloc_num_Buffer_256; ++j)
		{
			pBuff256_sd.buffer = (char*)memPartAlloc(pPart256, 256);
			printf("0x%07x\t",pBuff256_sd.buffer);
			if((j + 1) % 5 == 0)
				printf("\n");
			if(msgQSend(msgQId_pool256, (char*)&pBuff256_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
			{
				printf("Buffer 256 allocation failed.\n");
				return (ERROR);
			}
		}
		printf("\n*************************************************\nYou have successfully allocated Total Memory Pool\nwith %d 16_buffers and %d 256_buffers.\nNow Program Starting......\n*************************************************\n", alloc_num_Buffer_16, alloc_num_Buffer_256);
	} else {
		printf("Total Memory Pool allocation failed.\nPlease input the valid amount of buffers.\n");
		return (ERROR);
	}

	semGive(semId);							/* 互斥信號量 */

	return (OK);
}

/****************************************************************************/
/**************************** 功能函數(shù) bufGet() *****************************/
/****************************************************************************/

/* 實現(xiàn)功能: 按照用戶需求分配若干個自定義大小內(nèi)存塊, */
/* 并輸出分配到的內(nèi)存塊的地址.內(nèi)存的分配實現(xiàn)統(tǒng)一管理 */

STATUS bufGet(unsigned int &alloc_buf_size, unsigned int &alloc_num)
{
	/* 初始化接收消息對象 */
	PBUFFER pBuff16_rc;
	PBUFFER pBuff256_rc;

	/* 內(nèi)存申請 */
	/* 1.如果申請內(nèi)存塊大小小于16 */
	if(alloc_buf_size > 0 && alloc_buf_size <= 16)		
	{
		/* 如果需要分配的內(nèi)存塊個數(shù)小于當前16內(nèi)存池中未分配內(nèi)存塊的個數(shù)	*/
		/* 則直接在16內(nèi)存池中申請 */
		if(alloc_num > 0 && alloc_num <= msgQNumMsgs(msgQId_pool16)) 
		{
			for(int i = 0; i < alloc_num; ++i)
			{
				/* 從消息隊列中接收內(nèi)存塊地址 */
				if(msgQReceive(msgQId_pool16, (char*)&pBuff16_rc, sizeof(PBUFFER), WAIT_FOREVER)==ERROR)
				{
					return(ERROR);
				}
				/* 將已分配地址保存并輸出 */
				pbuf16_store[buf_16_num] = pBuff16_rc.buffer;
				printf("0x%07x\t",pbuf16_store[buf_16_num]);
				++buf_16_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}
			/* 內(nèi)存不足告警提示信息 */
			if(msgQNumMsgs(msgQId_pool16) <= 3)
			{
				printf("\nCAUTION:You got %d 16_buffer left.\n",msgQNumMsgs(msgQId_pool16));
			}

		/* 如果需要分配的內(nèi)存塊個數(shù)大于當前16內(nèi)存池未分配內(nèi)存塊的個數(shù),	*/
		/* 但小于16內(nèi)存池和256內(nèi)存池中未分配的內(nèi)存總數(shù)之和,則先在16內(nèi)存	*/
		/* 池中申請完所有的內(nèi)存塊,再在256內(nèi)存池中申請剩下的內(nèi)存塊		*/
		} else if (alloc_num > msgQNumMsgs(msgQId_pool16) 
			&& alloc_num <= msgQNumMsgs(msgQId_pool16) + msgQNumMsgs(msgQId_pool256)) {

				int b16_num = msgQNumMsgs(msgQId_pool16);
				int b256_num = alloc_num - msgQNumMsgs(msgQId_pool16);
				printf("\nCAUTION:No 16_buffer left. So 256_buffer will be used.\n");
				printf("16_buffer address:\n");
				
				/* 先在16內(nèi)存池中申請 */
				for(int i = 0; i < b16_num; ++i)
				{
					/* 從消息隊列中接收內(nèi)存塊地址 */
					if(msgQReceive(msgQId_pool16,(char*)&pBuff16_rc,sizeof(PBUFFER),WAIT_FOREVER)==ERROR)
					{
						return(ERROR);
					}
					/* 將已分配地址保存并輸出 */
					pbuf16_store[buf_16_num] = pBuff16_rc.buffer;
					printf("0x%07x\t",pbuf16_store[buf_16_num]);
					++buf_16_num;
					if((i + 1) % 5 == 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美肥老太交大片| 国产精品免费久久久久| 美女视频黄久久| 精品国产免费视频| 国产剧情一区二区| 国产精品私人自拍| 欧美视频一区二区三区四区| 午夜av区久久| 欧美精品一区二区蜜臀亚洲| 成人精品在线视频观看| 亚洲黄色性网站| 日韩欧美中文字幕一区| 国产成人精品一区二| 中文字幕日韩精品一区| 欧美在线小视频| 国产在线麻豆精品观看| 中文字幕一区二区三区精华液 | 中文天堂在线一区| 99久久久国产精品| 亚洲成人福利片| 久久老女人爱爱| 日本道精品一区二区三区| 全国精品久久少妇| 国产精品免费丝袜| 欧美一级黄色录像| 99久久国产综合精品色伊| 日韩精品电影在线| 成人欧美一区二区三区白人| 欧美日韩精品一区视频| 成人在线综合网| 午夜精品视频在线观看| 国产欧美日韩视频在线观看| 欧美午夜精品一区| 东方欧美亚洲色图在线| 五月天婷婷综合| 国产精品美女久久久久久2018| 在线观看91av| 成人国产一区二区三区精品| 日韩成人精品在线观看| 中文字幕一区二区日韩精品绯色| 91精品国产综合久久精品app| 波波电影院一区二区三区| 丝袜亚洲另类丝袜在线| 亚洲日本在线视频观看| 精品国产1区2区3区| 欧美视频在线一区二区三区| 不卡在线观看av| 狠狠色伊人亚洲综合成人| 亚洲国产cao| 亚洲日本免费电影| 欧美国产欧美综合| 亚洲精品在线网站| 日韩一级大片在线观看| 欧美片在线播放| 色综合久久久久久久| 成人av电影在线网| 国产精品亚洲视频| 麻豆国产精品官网| 日本欧美肥老太交大片| 午夜a成v人精品| 亚洲成人av免费| 亚洲成年人网站在线观看| 日韩美女久久久| 中文字幕综合网| 亚洲天堂网中文字| 国产精品美女久久久久久久网站| 国产色爱av资源综合区| 精品久久久影院| 26uuu精品一区二区三区四区在线| 69堂成人精品免费视频| 欧美剧情片在线观看| 欧美日本在线视频| 欧美探花视频资源| 欧美日韩中文字幕一区| 欧美日韩mp4| 91精品黄色片免费大全| 日韩欧美一二三四区| 日韩精品最新网址| 欧美成人a∨高清免费观看| 欧美mv和日韩mv的网站| 久久婷婷成人综合色| 久久精品在线免费观看| 国产精品视频一区二区三区不卡| 中文字幕第一区| 亚洲婷婷综合色高清在线| 亚洲天堂精品视频| 伊人一区二区三区| 婷婷久久综合九色综合伊人色| 日韩国产精品久久| 久久成人av少妇免费| 国产成人在线色| 一本大道av伊人久久综合| 欧美亚洲综合久久| 欧美大黄免费观看| 欧美国产激情一区二区三区蜜月| 亚洲丝袜制服诱惑| 亚洲国产精品一区二区久久恐怖片| 婷婷国产在线综合| 国产麻豆视频精品| 色先锋资源久久综合| 7777精品伊人久久久大香线蕉经典版下载 | 欧美日韩你懂得| 日韩欧美成人激情| 国产精品女上位| 亚洲电影第三页| 国内精品伊人久久久久av影院| 国产91精品入口| 欧美视频一区二区在线观看| 精品国产制服丝袜高跟| 国产精品午夜在线| 无码av中文一区二区三区桃花岛| 韩国三级在线一区| 色8久久精品久久久久久蜜| 欧美一区二视频| 国产精品久久久久久久久晋中| 一区二区三区91| 国产精一区二区三区| 欧美亚一区二区| 久久久国际精品| 亚洲动漫第一页| 国产传媒日韩欧美成人| 欧美日韩午夜在线| 欧美韩国一区二区| 日本成人在线电影网| 91亚洲永久精品| 久久这里只有精品6| 亚洲成av人影院在线观看网| 成人在线视频首页| 日韩丝袜美女视频| 夜夜嗨av一区二区三区中文字幕 | 99re6这里只有精品视频在线观看| 日本三级韩国三级欧美三级| 欧美亚洲禁片免费| 日韩视频免费观看高清完整版 | 免费日韩伦理电影| 91免费版在线看| 久久婷婷国产综合精品青草| 亚洲午夜国产一区99re久久| 成人sese在线| 久久嫩草精品久久久精品一| 亚洲成人先锋电影| 在线视频国产一区| 中文字幕亚洲综合久久菠萝蜜| 麻豆精品国产91久久久久久| 欧美日韩欧美一区二区| 亚洲久草在线视频| 国产在线视频不卡二| 欧美人妇做爰xxxⅹ性高电影 | 久久久久久久av麻豆果冻| 视频一区二区欧美| 欧美日韩视频在线第一区| 亚洲图片欧美激情| 成人午夜视频免费看| 欧美韩国一区二区| 国产精品综合在线视频| 26uuu久久综合| 狠狠狠色丁香婷婷综合激情| 日韩欧美一区在线观看| 五月天久久比比资源色| 欧美日韩成人一区二区| 亚洲国产cao| 6080午夜不卡| 裸体在线国模精品偷拍| 欧美va亚洲va| 国模一区二区三区白浆| 久久久久久久网| 国产麻豆视频一区| 欧美国产精品一区二区三区| 国产成人精品综合在线观看| 国产精品无圣光一区二区| 波多野结衣中文字幕一区二区三区| 亚洲国产精品v| www.欧美日韩国产在线| 亚洲欧洲在线观看av| 在线精品国精品国产尤物884a| 亚洲六月丁香色婷婷综合久久| 在线精品视频免费观看| 三级一区在线视频先锋| 日韩免费高清电影| 国产精品69久久久久水密桃| 中文字幕欧美日韩一区| 91女厕偷拍女厕偷拍高清| 一区二区三区欧美日韩| 欧美日韩高清一区| 韩日精品视频一区| 欧美激情一区二区三区蜜桃视频| 94-欧美-setu| 亚洲一区二区三区中文字幕在线| 欧美日韩日本视频| 激情五月播播久久久精品| 国产调教视频一区| 欧美在线一区二区| 久久精品国产亚洲5555| 国产精品入口麻豆原神| 欧美亚洲动漫制服丝袜| 狠狠狠色丁香婷婷综合久久五月| 国产精品国产三级国产三级人妇| 一本一本大道香蕉久在线精品 | 91美女精品福利| 日韩精品成人一区二区在线|