uC - OS-II实验指导书2014

2026/1/27 11:50:49

的内存块。应用可以动态申请这些内存块并在用完后将其释放回这个内存区域。该函数的返回值就是指向这个内存区域控制块的指针,并作为OSMemGet(),OSMemPut(),OSMemQuery()等相关调用的参数。

函数原型:OSMemCreate( void *addr, INT32U nblks ,INT32U blksize, INT8U *err); 参数说明:addr 建立的内存区域的起始地址。可以使用静态数组或在系统初始化时使用malloc()函数来分配这个区域的空间。

Nblks 内存块的数目。每一个内存区域最少需要定义两个内存块。

Blksize 每个内存块的大小,最小应该能够容纳一个指针变量。

Err 是指向包含错误码的变量的指针。Err可能是如下几种情况:

? OS_NO_ERR :成功建立内存区域。

? OS_MEM_INVALID_ADDR:非法地址,即地址为空指针。 ? OS_MEM_INVALID_PART :没有空闲的内存区域。

? OS_MEM_INVALID_BLKS :没有为内存区域建立至少两个内存块。 ? OS_MEM_INVALID_SIZE :内存块大小不足以容纳一个指针变量。

返回值 :OSMemCreate()函数返回指向所创建的内存区域控制块的指针。如果创建失败,函数返回空指针。

3.2 OSMemGet()

该函数用于从内存区域分配一个内存块。用户程序必须知道所建立的内存块的大小,并必须在使用完内存块后释放它。可以多次调用OSMemGet()函数。它的返回值就是指向所分配内存块的指针,并作为OSMemPut()函数的参数。

函数原型:OSMemGet(OS_MEM *pmem, INT8U *err);

参数说明:pmem 是指向内存区域控制块的指针,可以从OSMemCreate()函数的返回值中得到。

Err 是指向包含错误码的变量的指针。Err可能是如下情况:

? OS_NO_ERR :成功得到一个内存块。

? OS_MEM_NO_FREE_BLKS :内存区域中已经没有足够的内存块。

返回值:OSMemGet()函数返回指向所分配内存块的指针。如果没有可分配的内存块,OSMemGet

()函数返回空指针。

3.3 OSMemPut()

该函数用于释放一个内存块,内存块必须释放回它原先所在的内存区域,否则会造成系统错误。

函数原型:OSMemPut( OS_MEM *pmem, void *pblk);

参数说明:pmem 是指向内存区域控制块的指针,可以从OSMemCreate()函数的返回值中得

到。

49

Pblk 是指向将被释放的内存块的指针。

返回值 :OSMemPut()函数的返回值为下述之一:

? OS_NO_ERR :成功释放内存块

? OS_MEM_FULL :内存区域已满,不能再接受更多释放的内存块。这种情况说

明用户程序出现了错误,释放了多于用OSMemGet()函数得到的内存块。

3.4 OSMemQuery()

该函数用于得到内存区域的信息。

函数原型:OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata); 参数说明:

pmem 是指向内存区域控制块的指针,可以从OSMemCreate()函数的返回值中得到。 Pdata 是一个指向OS_MEM_DATA数据结构的指针,该数据结构包含了以下的域:

Void OSAddr; Void

/*指向内存区域起始地址的指针

*/ */ */ */ */ */

OSFreeList;

/*指向空闲内存块列表起始地址的指针 /*每个内存块的大小

INT32U OSBlkSize; INT32U OSNBlks; INT32U OSNFree;

/*该内存区域中的内存块总数 /*空闲的内存块数目 /*已使用的内存块数目

INT32U OSNUsed;

50


uC - OS-II实验指导书2014.doc 将本文的Word文档下载到电脑
搜索更多关于: uC - OS-II实验指导书2014 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219