动态内存管理

动态内存管理

ID:45575836

大小:112.69 KB

页数:5页

时间:2019-11-15

动态内存管理_第1页
动态内存管理_第2页
动态内存管理_第3页
动态内存管理_第4页
动态内存管理_第5页
资源描述:

《动态内存管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、学号:嵌入式系统及应用实验报告动态内存管理名级绩2013年11月25日简介gC/os-n自己设计了一•套动态内存分配系统。^iC/OS-II的动态内存分配是以块为单位分配的,一次只能分配一个块,块的大小可以由用户来定义。系统可以管理多个堆(用于动态内存管理的空间),各个堆中的块的大小可以定义得不一样,但同一个堆中的块大小是相同的。1、实验目的a)理解消息队列的基木原理,了解任务的各个消息队列基木状态及其变迁过程;b)掌握UC/OS-IIH1消息队列管理的基木方法(创建、启动、挂起、解挂任务人c)熟练使用uC/OS-11消息队列管理的基本系统调用。2、实验原理及程序结构2.1实验设计让一

2、个LED以传递过来的参数确定点亮时间,以此示例来说明如何使用动态内存管理来实现数据通信,假设TaskLED为高优先级的任务。两个任务的处理流程如下。LED任务的代码如下。voidTaskLED(void*pdata)q=OSQCreateCmsg,QSIZE);mem=OSMemCreate(dly1QSIZE,sizeof(INT32U),&err);创建内存分区,保存消息]while(1){pd二(INT32UJOSQPend(q,0,&eir);IOOCLR二LED1:OSTimeDNCpd);OSMemPut(mem,pd);IOOSET=LED1;OSTimeDly(IO);

3、{等待接收消息指针(点亮LED{以消息內容为延时参数释放内存块熄灭LED(延时10CIK发送消息任务SendDly的代码如下。2・2源程序说明UCOS-II的内心管理提供了对某块完整内心的修改,功能非常简单NBNC的代码人概只有200多行,在整个内核中也基本是独立的。它通过如下方式对内存块进行管理:OSMEM*inem;TNT8Ubuff[16][128];voidmain(void){INT8Uerr;mem二OSMemCreate(&buff[0][01,16,128,&err);}下文分析os.mem.c文件,从全局变量的定义与接口函数的实现两方面记录ucos-II的内存管理机制

4、。1.MEM的全局变量OS_EXTOS_MEM^OSMemFrecList;/*Pointertofreelistofmemorypartitions*/OSEXTOSMEM0SMemTbl[0SMAXMEMPART];/*Storageformemorypartitionmanager*/上面两个全局变量在内核初始化中由OS_Memlnit初始,用户试图进行管理的一个内存块,如上例中的buff,对应内核中的一个OS_MEM资源,OS_MEM结构体定义如下:毛Itypedefstruct{/*MEMORYCONTROLBLOCK*/void*0SMemAddr;/*Pointertob

5、eginningofmemorypartition*/void^OSMemFreeList;/*Pointertolistoffreememoryblocks*/1NT32UOSMemBlkSize;/*Size(inbytes)ofeachblockofmemory*/INT32UOSMemNBlks;/*Totalnumberofblocksinthispartition*/INT32UOSMemNFree;/*Numberofmemoryblocksrcmaininginthispartition*/}0SJ1EM;2.MEM的接口函数1.建立内存分区OSMemCreate:在该

6、函数中一个空闲的OS_MEM资源通过OSMemFreeList被获取,同时这个内存分区内的内存块被初始化为一个起始地址是OSMemAddr的链表。我认为这个链表的定义是非常巧妙的,当前节点的值存储下一个节点的地址,一次类推,代码如下(映像中linux内核中的万用链表也是类似的机制):电Iplink=(void**)addr;//addr是内存分区的起始地址、blksize是内存分区中每个内存块的大小pblk=(1NT8U*)addr+blksize;for(i=0;i<(nblks-1);i++){Uplink=(void*)pblk;//相当于把pNext的地址复制给pCur的值pl

7、ink二(void**)pblk;pblk=pblk+blksize;}Uplink二(void*)0;pmem->OSMemAddr二addr;pmem->OSMemFreeList二addr;2.主要接口函数诸如获収一个内存块或者释放一个内存块,都是对上述链表的操作。但由于链表的定义,链表的插入和删除变得很简单。例如返回一个内存块给内存分区:*(void**)pblk二pmem->OSMemFreeList;//把当前的pFree作为pBl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。