UCOS-II API 参考手册 下载本文

参考手册

OSMemQuery( )

INT8U OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);

所属文件 调用者 开关量 OS_MEM_EN 任务或中断 OSMemQuery()函数得到内存区的信息。该函数返回OS_MEM结构包含的信息,但使用了一个新的OS_MEM_DATA的数据结构。OS_MEM_DATA数据结构还包含了正被使用的内存块数目的域。

OS_MEM.C 参数

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

V /*指向内存区起始地址的指针 */ oid OSAddr; Void OSFreeList; /*指向空闲内存块列表起始地址的指针 */ INT32U OSBlkSize; /*每个内存块的大小 */ INT32U OSNBlks; /*该内存区的内存块总数 */ INT32U OSNFree; /*空闲的内存块数目 */ INT32U OSNUsed; /*使用的内存块数目 */

返回值

OSMemQuery()函数返回值总是OS_NO_ERR。

注意/警告

必须首先建立内存区,然后使用。

范例:

OS_MEM *CommMem;

void Task (void *pdata) {

INT8U err; OS_MEM_DATA mem_data;

pdata = pdata; for (;;) { .

err = OSMemQuery(CommMem, &mem_data); . } }

μC/OS-II:实时操作系统内核

OSQAccept( )

Void *OSQAccept(OS_EVENT *pevent);

所属文件 调用者 开关量 OS_Q_EN 任务或中断 OSQAccept()函数检查消息队列中是否已经有需要的消息。不同于OSQPend()函数,如果没有需要的消息,OSQAccept()函数并不挂起任务。如果消息已经到达,该消息被传递到用户任务。通常中断调用该函数,因为中断不允许挂起等待消息。

OS_Q.C 参数

pevent 是指向需要查看的消息队列的指针。当建立消息队列时,该指针返回到用户程序。(参考OSMboxCreate()函数)。

返回值

如果消息已经到达,返回指向该消息的指针;如果消息队列没有消息,返回空指针。

注意/警告

必须先建立消息队列,然后使用。

范例:

OS_EVENT *CommQ;

void Task (void *pdata) {

void *msg;

pdata = pdata; for (;;) {

msg = OSQAccept(CommQ); /* 检查消息队列 */ if (msg != (void *)0) {

. /* 处理接受的消息 */ . } else {

. /* 没有消息 */ } . } }

参考手册

μC/OS-II:实时操作系统内核

OSQCreate( )

OS_EVENT *OSQCreate( void **start, INT8U size);

所属文件 调用者 开关量 OS_Q_EN 任务或启动代码 OSQCreate()函数建立一个消息队列。任务或中断可以通过消息队列向其他一个或多个任务发送消息。消息的含义是和具体的应用密切相关的。

OS_Q.C 参数

start 是消息内存区的基地址,消息内存区是一个指针数组。 Size 是消息内存区的大小。

返回值

OSQCreate()函数返回一个指向消息队列事件控制块的指针。如果没有空余的事件空闲块,OSQCreate()函数返回空指针。

注意/警告

必须先建立消息队列,然后使用。

范例:

OS_EVENT *CommQ; void *CommMsg[10];

void main(void) {

OSInit(); /* 初始化μC/OS-Ⅱ */ . .

CommQ = OSQCreate(&CommMsg[0], 10); /*建立消息队列 */ .

OSStart(); /* 启动多任务内核 */ }