关于freemodbus中portevent.c中变量的意义

关于事件变量的个人理解


/* ----------------------- Variables ----------------------------------------*/
static eMBEventType eQueuedEvent;
static BOOL     xEventInQueue;
eQueuedEvent:

指示队列中的事件类型。变量的类型时enum型。内容如下

//mbport.h
typedef enum
{
    EV_READY,                   /*!< Startup finished. */
    EV_FRAME_RECEIVED,          /*!< Frame received. */
    EV_EXECUTE,                 /*!< Execute function. */
    EV_FRAME_SENT               /*!< Frame sent. */
} eMBEventType;
xEventInQueue:

指示是否有事件在队列中

  1. 事件初始化
BOOL
xMBPortEventInit( void )
{
    xEventInQueue = FALSE;
    return TRUE;
}

  1. 事件post
BOOL
xMBPortEventPost( eMBEventType eEvent )
{
    xEventInQueue = TRUE;
    eQueuedEvent = eEvent;
    return TRUE;
}

post一个事件

  1. get事件
BOOL
xMBPortEventGet( eMBEventType * eEvent )
{
    BOOL            xEventHappened = FALSE;

    if( xEventInQueue )
    {
        *eEvent = eQueuedEvent;
        xEventInQueue = FALSE;
        xEventHappened = TRUE;
    }
    return xEventHappened;
}

get事件,这也是在eMBPoll()中一直查询的事件状态。当事件get到了,xEventInQueue 自然也清零。xEventHappened 变量作为局部变量,是指示到底有没有事件发生,这也作为eMBPoll()中查询状态与否的依据

你可能感兴趣的:(freemodbus)