ucosII消息队列创建函数
来源:互联网 发布:软件新技术有哪些 编辑:程序博客网 时间:2024/05/01 14:17
/*****************************************************************************
函数名:*OSQCreate
函数的参数:void **start 消息队列的首地址
INT16U size 消息队列的长度
函数的返回值:指向消息队列的指针
函数实现的过程:
一,从空的事件链表中取一个事件
pevent = OSEventFreeList
if(pevnet !=(OS_Event *)0) OSEventFreeList = OSEventFreeList->OSEventPtr;
二、从空的消息链表中取一个消息
pq = OSQFreeList;
if (pq != (OS_Q *)0) { OSQFreeList = OSQFreeList->OSQPtr; 对事件和队列赋值}
三、初始化任务控制块:
OS_EventWaitListInit(pevent);
清空任务等待列表
pevent->OSEventGrp = 0;
ptbl = &pevent->OSEventTbl[0];
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) *ptbl++ = 0;
******************************************************************************/
OS_EVENT *OSQCreate (void **start, INT16U size)
{
OS_EVENT *pevent;
OS_Q *pq;
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
if (OSIntNesting > 0) { /* See if called from ISR ... */
return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
}
OS_ENTER_CRITICAL();
pevent = OSEventFreeList;
if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
}
OS_EXIT_CRITICAL();
if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */
OS_ENTER_CRITICAL();
pq = OSQFreeList; /* Get a free queue control block */
if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */
OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/
OS_EXIT_CRITICAL();
pq->OSQStart = start; /* Initialize the queue */
pq->OSQEnd = &start[size];
pq->OSQIn = start;
pq->OSQOut = start;
pq->OSQSize = size;
pq->OSQEntries = 0;
pevent->OSEventType = OS_EVENT_TYPE_Q;
pevent->OSEventCnt = 0;
pevent->OSEventPtr = pq;
#if OS_EVENT_NAME_SIZE > 1
pevent->OSEventName[0] = '?'; /* Unknown name */
pevent->OSEventName[1] = OS_ASCII_NUL;
#endif
OS_EventWaitListInit(pevent); /* Initalize the wait list */
}
else {
pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */
OSEventFreeList = pevent;
OS_EXIT_CRITICAL();
pevent = (OS_EVENT *)0;
}
}
return (pevent);
}
- ucosII消息队列创建函数
- UCOSII 消息邮箱 消息队列
- ucosii 消息队列的应用
- ucosII 消息队列 消息长度计算
- STM32上使用UCOSII--消息队列和信号量集
- 创建消息队列
- 批量创建消息队列
- 消息队列函数
- linux消息队列函数
- 《消息队列》函数讲解
- 消息队列函数详解
- linux消息队列函数
- 消息队列操作函数
- 消息队列函数知识点
- Ucosii消息邮箱使用
- ucosii 消息邮箱使用!!
- Ucosii消息邮箱使用
- WTL 窗口创建消息队列
- 软件工程——第七章 软件维护
- 123
- AMD 64bit Flash install
- linux下的FTP的配置(转帖)
- 理解缓存
- ucosII消息队列创建函数
- X86之操作系统之DPL,RPL,CPL的区别与联系
- 软件工程——第七章 软件维护
- Ext grid自动宽度
- float和double在的存储方式
- MOSS2007自定义WebService(1)-----自定义Webservice的步骤介绍
- Linux内核同步3-RCU
- oracle的管理工具OEM以及重建索引
- 软件工程——第八章 用户界面设计(一)