您的位置:首页 > 其它

uCOS-II 学习笔记之事件管理--------事件管理程序

2014-01-12 20:38 447 查看
事件控制块(ECB)

事件控制块的数据结构

typedef struct os_event {
INT8U    OSEventType;                    /* Type of event control block (see OS_EVENT_TYPE_xxxx)    */
void    *OSEventPtr;                     /* Pointer to message or queue structure                   */
INT16U   OSEventCnt;                     /* Semaphore Count (not used if other EVENT type)          */
OS_PRIO  OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
OS_PRIO  OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */

#if OS_EVENT_NAME_EN > 0u
INT8U   *OSEventName;
#endif
} OS_EVENT;


1、事件控制块(ECB)的初始化

static  void  OS_InitEventList (void)
{
#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0u)
#if (OS_MAX_EVENTS > 1u)
INT16U     ix;
INT16U     ix_next;
OS_EVENT  *pevent1;
OS_EVENT  *pevent2;

OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table                   */
for (ix = 0u; ix < (OS_MAX_EVENTS - 1u); ix++) {        /* Init. list of free EVENT control blocks */
ix_next = ix + 1u;
pevent1 = &OSEventTbl[ix];
pevent2 = &OSEventTbl[ix_next];
pevent1->OSEventType    = OS_EVENT_TYPE_UNUSED;
pevent1->OSEventPtr     = pevent2;
#if OS_EVENT_NAME_EN > 0u
pevent1->OSEventName    = (INT8U *)(void *)"?";     /* Unknown name                            */
#endif
}
pevent1                         = &OSEventTbl[ix];
pevent1->OSEventType            = OS_EVENT_TYPE_UNUSED;
pevent1->OSEventPtr             = (OS_EVENT *)0;
#if OS_EVENT_NAME_EN > 0u
pevent1->OSEventName            = (INT8U *)(void *)"?"; /* Unknown name                            */
#endif
OSEventFreeList                 = &OSEventTbl[0];
#else
OSEventFreeList                 = &OSEventTbl[0];       /* Only have ONE event control block       */
OSEventFreeList->OSEventType    = OS_EVENT_TYPE_UNUSED;
OSEventFreeList->OSEventPtr     = (OS_EVENT *)0;
#if OS_EVENT_NAME_EN > 0u
OSEventFreeList->OSEventName    = (INT8U *)"?";         /* Unknown name                            */
#endif
#endif
#endif
}


2、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: