的内存块。应用可以动态申请这些内存块并在用完后将其释放回这个内存区域。该函数的返回值就是指向这个内存区域控制块的指针,并作为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
相关推荐: