参考手册
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(); /* 启动多任务内核 */ }