您好,登錄后才能下訂單哦!
小編給大家分享一下vxworks中Event是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
/* resource-related options */
#define EVENTS_OPTIONS_NONE 0x00
#define EVENTS_SEND_ONCE 0x01 /* unregister events after eventSend */
#define EVENTS_ALLOW_OVERWRITE 0x02 /* can overwrite previous registration */
#define EVENTS_SEND_IF_FREE 0x04 /* send events in xxxEvStart() */
STATUS semEvStart(SEM_ID semId, UINT32 events, UINT8 options);
STATUS semEvStop (SEM_ID semId);
STATUS msgQEvStart(MSG_Q_ID msgQId, UINT32 events, UINT8 options);
STATUS msgQEvStop (MSG_Q_ID msgQId);
看一個例子
/* Copyright 2020 VxWorks567 */
#include <stdio.h> /* printf() */
#include <eventLib.h> /* eventReceive() */
#include <semEvLib.h> /* semEvStart() */
#include <msgQEvLib.h>/* msgQEvStart() */
#define MSGS_NUM 5
#define MSG_LEN 5
static SEM_ID semId;
static MSG_Q_ID msgQId;
void testEvent()
{
_Vx_event_t eventsReceived;
/* 用二進制信號量表示一種資源 */
semId = semBCreate(SEM_Q_FIFO, SEM_EMPTY);
/* 將當前任務注冊到該信號量 */
semEvStart(semId, VXEV01, EVENTS_OPTIONS_NONE);
/* 用消息隊列表示一種資源 */
msgQId = msgQCreate(MSGS_NUM, MSG_LEN, MSG_Q_FIFO);
/* 將當前任務注冊到該消息隊列 */
msgQEvStart(msgQId, VXEV02, EVENTS_OPTIONS_NONE);
while(1)
{
/* 任一資源有效時,即進行處理 */
eventReceive(VXEV01|VXEV02, EVENTS_WAIT_ANY, WAIT_FOREVER, &eventsReceived);
if(eventsReceived&VXEV01)
{
/* 信號量有效,且無其它任務申請信號量 */
printf("\n\tsemphore is free\n");
semTake(semId, WAIT_FOREVER);
}
else if(eventsReceived&VXEV02)
{
/* 新消息達到,且無其它任務讀取消息 */
printf("\n\tmsgQ is free\n");
msgQReceive(msgQId, NULL, 0, WAIT_FOREVER);
}
}
}
void freeSem()
{
/* 釋放信號量,表示對應資源有效 */
semGive(semId);
}
void freeMsgQ()
{
/* 發送消息,表示對應資源有效 */
msgQSend(msgQId, 0, 0, 0, 0);
}
執行效果
以上是“vxworks中Event是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。