亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msgqlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* msgQLib.c - message queue library *//* Copyright 1990-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------02n,10dec01,bwa  Added comment about MSG_Q_EVENTSEND_ERR_NOTIFY msgQCreate                 option (SPR 72058).02m,26oct01,bwa  Added msgQEvLib and eventLib to the list of 'SEE ALSO'                 modules.02l,12oct01,cjj  Added documentation regarding S_eventLib_EVENTSEND_FAILED                 error02k,09oct01,gls  merged in 02j, 02i, 02h, 02g below from AE.02j,22feb01,ahm  ensured errno does'nt change if msgQDelete() is successful                 (SPR#34643)02i,19sep00,bwa  passed extra argument (msgQid) to calls to qJobGet()                 added errnoSet after calls to qJobGet()(SPR #34057) 02h,06sep00,aeg  doc: mentioned INCLUDE_MSG_Q component name.02g,11aug00,aeg  fixed updating of timeout stats in msgQSend/Receive (SPR 33683)02f,07sep01,bwa  Added VxWorks events support. Fixed SPR #31241 (corrected		 msgQReceive comment for NO_WAIT).02e,18dec00,pes  Correct compiler warnings02d,19may98,drm  merged code from 3rd party to add distributed message queue                  support.                 - merged code was originally based on version 02a 02c,11may98,cjtc fix problem with problem fix!! Multiple calls to object                 instrumentation in msgQDestroy02b,11may98,nps  fixed msgQDestroy instrumentation anomaly.02c,17apr98,rlp  canceled msgQInit and msgQSend modifications for backward                 compatibility.02b,04nov97,rlp  modified msgQInit and msgQSend for tracking messages sent.02a,24jun96,sbs  made windview instrumentation conditionally compiled01z,22oct95,jdi  doc: added bit values for options (SPR 4276).02d,14apr94,smb  fixed class dereferencing for instrumentation macros02c,15mar94,smb  modified instrumentation macros02b,24jan94,smb  added instrumentation macros02a,18jan94,smb  added instrumentation corrections for msgQDelete01z,10dec93,smb  added instrumentation01y,30jun93,jmm  changed msgQDestroy to look at msgQ as well as freeQ (spr 2070)01x,02feb93,jdi  documentation cleanup for 5.1.01w,13nov92,jcf  package init called with object creation.01v,19oct92,pme  added reference to shared message queue documentation.01u,23aug92,jcf  balanced taskSafe with taskUnsafe.01t,11aug92,jcf  fixed msgQDestroy safety problem.01s,30jul92,rrr  added restart and msgQ fix01r,29jul92,pme  added NULL function pointer check for smObj routines.01q,29jul92,jcf  package init called with object initialization.01p,22jul92,pme  made msgQDestroy return S_smObjLib_NO_OBJECT_DESTROY when		 trying to destroy a shared message queue.01o,19jul92,pme  added shared message queue support.01n,18jul92,smb  Changed errno.h to errnoLib.h.01m,04jul92,jcf	 show routine removed.01l,26may92,rrr  the tree shuffle01k,13dec91,gae  ANSI fixes.  01j,19nov91,rrr  shut up some ansi warnings.01i,04oct91,rrr  passed through the ansification filter                  -changed functions to ansi style		  -changed includes to have absolute path from h/		  -changed VOID to void		  -changed copyright notice01h,10aug91,del  changed interface to qInit to pass all "optional" args.01g,05apr91,jdi	 documentation -- removed header parens and x-ref numbers;		 doc review by dnw.01f,22jan91,jaa	 documentation.01e,08oct90,dnw  lint01d,01oct90,dnw  fixed bug of msgQSend() not returning ERROR on timeout.		 removed msgQSendArgs()/ReceiveArgs().		 reordered parameters of msgQ{Send,Receive}().		 simplified msgQInfoGet() interface.		 added msgQNumMsgs().		 made msgQDestroy() LOCAL.		 made msgQ{LibInit,Init,Terminate}() be NOMANUAL.		 finished documentation.01c,19jul90,dnw  added VARARGS to msgQ{Send,Receive}Args()01b,19jul90,dnw  changed call to objAlloc() to objAllocExtra()		 made msgQShow() prettier		 lint01a,10may90,dnw  written*//*DESCRIPTIONThis library contains routines  for creating and using message queues, the primary intertask communication mechanism within a single CPU.  Messagequeues allow a variable number of messages (varying in length) to bequeued in first-in-first-out (FIFO) order.  Any task or interrupt serviceroutine can send messages to a message queue.  Any task can receivemessages from a message queue.  Multiple tasks can send to and receivefrom the same message queue.  Full-duplex communication between two tasksgenerally requires two message queues, one for each direction.To provide message queue support for a system, VxWorks must be configuredwith the INCLUDE_MSG_Q component.CREATING AND USING MESSAGE QUEUESA message queue is created with msgQCreate().  Its parameters specify themaximum number of messages that can be queued to that message queue and the maximum length in bytes of each message.  Enough buffer space will be pre-allocated to accommodate the specified number of messages of specified length.A task or interrupt service routine sends a message to a message queuewith msgQSend().  If no tasks are waiting for messages on the message queue,the message is simply added to the buffer of messages for that queue.If any tasks are already waiting to receive a message from the messagequeue, the message is immediately delivered to the first waiting task.A task receives a message from a message queue with msgQReceive().If any messages are already available in the message queue's buffer,the first message is immediately dequeued and returned to the caller.If no messages are available, the calling task will block and be added toa queue of tasks waiting for messages.  This queue of waiting tasks canbe ordered either by task priority or FIFO, as specified in an optionparameter when the queue is created.TIMEOUTSBoth msgQSend() and msgQReceive() take timeout parameters.  When sending amessage, if no buffer space is available to queue the message, the timeoutspecifies how many ticks to wait for space to become available.  Whenreceiving a message, the timeout specifies how many ticks to wait if nomessage is immediately available.  The <timeout> parameter canhave the special values NO_WAIT (0) or WAIT_FOREVER (-1).  NO_WAIT means the routine should return immediately; WAIT_FOREVER means the routineshould never time out.URGENT MESSAGESThe msgQSend() routine allows the priority of a message to be specifiedas either normal or urgent, MSG_PRI_NORMAL (0) and MSG_PRI_URGENT (1),respectively.  Normal priority messages are added to the tail of the listof queued messages, while urgent priority messages are added to the headof the list.VXWORKS EVENTSIf a task has registered with a message queue via msgQEvStart(), events willbe sent to that task when a message arrives on that message queue, on thecondition that no other task is pending on the queue.INTERNAL:	WINDVIEW INSTRUMENTATIONLevel 1:	msgQCreate() causes EVENT_MSGQCREATE	msgQDestroy() causes EVENT_MSGQDELETE	msgQSend() causes EVENT_MSGQSEND	msgQReceive() causes EVENT_MSGQRECEIVELevel 2:	N/ALevel 3:	N/AINCLUDE FILES: msgQLib.hSEE ALSO: pipeDrv, msgQSmLib, msgQEvLib, eventLib,.pG "Basic OS"*/#include "vxWorks.h"#include "stdlib.h"#include "string.h"#include "taskLib.h"#include "intLib.h"#include "smObjLib.h"#include "errnoLib.h"#include "private/eventLibP.h"#include "private/classLibP.h"#include "private/objLibP.h"#include "private/msgQLibP.h"#include "private/msgQSmLibP.h"#include "private/distObjTypeP.h"#include "private/sigLibP.h"#include "private/eventP.h"#include "private/windLibP.h"#include "private/kernelLibP.h"/* locals */LOCAL OBJ_CLASS msgQClass;/* globals */CLASS_ID msgQClassId = &msgQClass;/* Instrumentation locals and globals */#ifdef WV_INSTRUMENTATIONLOCAL OBJ_CLASS msgQInstClass;CLASS_ID msgQInstClassId = &msgQInstClass;#endif/* shared memory objects function pointers */FUNCPTR  msgQSmSendRtn;FUNCPTR  msgQSmReceiveRtn;FUNCPTR  msgQSmNumMsgsRtn;/* distributed objects function pointers */FUNCPTR  msgQDistSendRtn;FUNCPTR  msgQDistReceiveRtn;FUNCPTR  msgQDistNumMsgsRtn;/* forward declarations */LOCAL STATUS msgQDestroy (MSG_Q_ID msgQId, BOOL dealloc);/* locals */LOCAL BOOL msgQLibInstalled;	/* protect from muliple inits *//********************************************************************************* msgQLibInit - initialize message queue library** This routine initializes message queue facility.* It is called once in kernelInit().** RETURNS: OK or ERROR** NOMANUAL*/STATUS msgQLibInit (void)    {    /* initialize shared memory objects function pointers */    if (!msgQLibInstalled)	{	if (classInit (msgQClassId, sizeof (MSG_Q), OFFSET (MSG_Q, objCore),		       (FUNCPTR)msgQCreate, (FUNCPTR)msgQInit,		       (FUNCPTR)msgQDestroy) == OK)	    {#ifdef WV_INSTRUMENTATION	    /* Instrumented class for windview */	    msgQClassId->initRtn = msgQInstClassId;            classInstrument (msgQClassId,msgQInstClassId);#endif	    msgQEvLibInit (); /* pull msgQLib in kernel */	    msgQLibInstalled = TRUE;	    }	}    return ((msgQLibInstalled) ? OK : ERROR);    }/********************************************************************************* msgQCreate - create and initialize a message queue** This routine creates a message queue capable of holding up to <maxMsgs>* messages, each up to <maxMsgLength> bytes long.  The routine returns * a message queue ID used to identify the created message queue in all * subsequent calls to routines in this library.  The queue can be created * with the following options:* .iP "MSG_Q_FIFO  (0x00)" 8* queue pended tasks in FIFO order.* .iP "MSG_Q_PRIORITY  (0x01)"* queue pended tasks in priority order.* .iP "MSG_Q_EVENTSEND_ERR_NOTIFY (0x02)"* When a message is sent, if a task is registered for events and the* actual sending of events fails, a value of ERROR is returned and the errno* is set accordingly. This option is off by default.* .LP** RETURNS:* MSG_Q_ID, or NULL if error.** ERRNO: S_memLib_NOT_ENOUGH_MEMORY, S_intLib_NOT_ISR_CALLABLE** SEE ALSO: msgQSmLib*/MSG_Q_ID msgQCreate    (    int         maxMsgs,        /* max messages that can be queued */    int         maxMsgLength,   /* max bytes in a message */    int         options         /* message queue options */    )    {    MSG_Q_ID	msgQId;    void *	pPool;		/* pointer to memory for messages */    UINT	size = (UINT) maxMsgs * MSG_NODE_SIZE (maxMsgLength);    if (INT_RESTRICT () != OK)		/* restrict ISR from calling */	return (NULL);    if ((!msgQLibInstalled) && (msgQLibInit () != OK))	return (NULL);			/* package init problem */    if ((msgQId = (MSG_Q_ID)objAllocExtra (msgQClassId, size, &pPool)) == NULL)	return (NULL);    if (msgQInit (msgQId, maxMsgs, maxMsgLength, options, pPool) != OK)	{	objFree (msgQClassId, (char *) msgQId);	return (NULL);	}#ifdef WV_INSTRUMENTATION    /* windview - level 1 event logging routine */    EVT_OBJ_4 (OBJ, msgQId, msgQClassId, EVENT_MSGQCREATE, 		msgQId, maxMsgs, maxMsgLength, options);#endif    return ((MSG_Q_ID) msgQId);    }/********************************************************************************* msgQInit - initialize a message queue** This routine initializes a message queue data structure.  Like msgQCreate()* the resulting message queue is capable of holding up to <maxMsgs> messages,* each of up to <maxMsgLength> bytes long.* However, instead of dynamically allocating the MSG_Q data structure,* this routine takes a pointer <pMsgQ> to the MSG_Q data structure to be* initialized, and a pointer <pMsgPool> to the buffer to be use to hold* queued messages.  <pMsgPool> must point to a 4 byte aligned buffer* that is (<maxMsgs> * MSG_NODE_SIZE (<maxMsgLength>)).** The queue can be created with the following options:**	MSG_Q_FIFO	queue pended tasks in FIFO order*	MSG_Q_PRIORITY	queue pended tasks in priority order** RETURNS: OK or ERROR.** ERRNO: S_msgQLib_INVALID_QUEUE_TYPE** SEE ALSO: msgQCreate()** NOMANUAL*/STATUS msgQInit    (    FAST MSG_Q *pMsgQ,          /* pointer to msg queue to initialize */    int         maxMsgs,        /* max messages that can be queued */    int         maxMsgLength,   /* max bytes in a message */    int         options,        /* message queue options */    void *      pMsgPool        /* pointer to memory for messages */    )    {    FAST int		nodeSize = MSG_NODE_SIZE (maxMsgLength);    FAST int		ix;    FAST Q_CLASS_ID	msgQType;    if ((!msgQLibInstalled) && (msgQLibInit () != OK))	return (ERROR);				/* package init problem */    bzero ((char *) pMsgQ, sizeof (*pMsgQ));	/* clear out msg q structure */    /* initialize internal job queues */    switch (options & MSG_Q_TYPE_MASK)        {        case MSG_Q_FIFO:	msgQType = Q_FIFO;	break;        case MSG_Q_PRIORITY:	msgQType = Q_PRI_LIST;	break;        default:            errnoSet (S_msgQLib_INVALID_QUEUE_TYPE);	    return (ERROR);        }    if ((qInit ((Q_HEAD *) &pMsgQ->msgQ, qJobClassId, msgQType,	 0, 0, 0, 0, 0, 0, 0, 0, 0) != OK) ||	(qInit ((Q_HEAD *) &pMsgQ->freeQ, qJobClassId, msgQType,	 0, 0, 0, 0, 0, 0, 0, 0, 0) != OK))	return (ERROR);    /* put msg nodes on free list */    for (ix = 0; ix < maxMsgs; ix++)	{	qJobPut (pMsgQ, &pMsgQ->freeQ, (Q_JOB_NODE *) pMsgPool,		 Q_JOB_PRI_DONT_CARE);	pMsgPool = (void *) (((char *) pMsgPool) + nodeSize);	}    /* initialize rest of msg q */    pMsgQ->options	= options;    pMsgQ->maxMsgs	= maxMsgs;    pMsgQ->maxMsgLength	= maxMsgLength;    eventInit (&pMsgQ->events);#ifdef WV_INSTRUMENTATION    if (wvObjIsEnabled)    {    /* windview - connect level 1 event logging routine */    objCoreInit (&pMsgQ->objCore, msgQInstClassId);    }    else#endif    objCoreInit (&pMsgQ->objCore, msgQClassId);    return (OK);    }/******************************************************************************** msgQTerminate - terminate message queue** This routine terminates a static message queue that was initialized with* msgQInit.** RETURNS: OK or ERROR.** NOMANUAL*/STATUS msgQTerminate    (    MSG_Q_ID msgQId     /* message queue id to terminate */    )    {    return (msgQDestroy (msgQId, FALSE));    }/********************************************************************************* msgQDelete - delete a message queue** This routine deletes a message queue.  All tasks pending on either* msgQSend(), msgQReceive() or pending for the reception of events* meant to be sent from the message queue will unblock and return* ERROR.  When this function returns, <msgQId> is no longer a valid * message queue ID.** RETURNS: OK on success or ERROR otherwise.** ERRNO:* .iP "S_objLib_OBJ_ID_ERROR"* Message queue ID is invalid* .iP "S_intLib_NOT_ISR_CALLABLE"* Routine cannot be called from ISR* .iP "S_distLib_NO_OBJECT_DESTROY"* Deleting a distributed message queue is not permitted* .iP "S_smObjLib_NO_OBJECT_DESTROY"* Deleting a shared message queue is not permitted* SEE ALSO: msgQSmLib*/STATUS msgQDelete    (    MSG_Q_ID msgQId     /* message queue to delete */    )    {    return (msgQDestroy (msgQId, TRUE));    }/********************************************************************************* msgQDestroy - destroy message queue** RETURNS: OK or ERROR.** ERRNO: S_distLib_NO_OBJECT_DESTROY**/LOCAL STATUS msgQDestroy    (    MSG_Q_ID msgQId,    /* message queue to destroy */    BOOL     dealloc    /* deallocate memory associated with message queue */    )    {    Q_JOB_NODE *pNode;    FAST int	timeout;    FAST int	nMsgs;    int errnoCopy;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区导航在线播放| 亚洲特级片在线| 日韩激情视频在线观看| 777午夜精品视频在线播放| 亚洲电影在线播放| 欧美一区二区三区视频在线 | 国产欧美日韩另类一区| 国产精品69久久久久水密桃| 中文久久乱码一区二区| 91香蕉视频mp4| 亚洲成人一二三| 欧美r级电影在线观看| 国产91精品久久久久久久网曝门| 中文字幕欧美激情| 在线视频欧美区| 奇米影视一区二区三区小说| 欧美极品另类videosde| 91成人在线观看喷潮| 日韩av网站在线观看| 26uuu久久天堂性欧美| 不卡一卡二卡三乱码免费网站| 亚洲欧美成aⅴ人在线观看| 欧美久久久影院| 国产91在线看| 亚洲成a人片在线不卡一二三区| 日韩一区二区在线观看视频| 国产精选一区二区三区| 亚洲自拍偷拍网站| 久久嫩草精品久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 免费的成人av| 亚洲激情中文1区| 精品人在线二区三区| 色综合天天综合网天天看片| 麻豆视频一区二区| 亚洲丝袜另类动漫二区| 欧美v日韩v国产v| 色嗨嗨av一区二区三区| 国产河南妇女毛片精品久久久| 伊人开心综合网| 久久精品一级爱片| 欧美福利视频导航| 91网址在线看| 国产老妇另类xxxxx| 水蜜桃久久夜色精品一区的特点| 中文字幕二三区不卡| 日韩视频一区二区三区| 色婷婷综合久色| 国产99久久久国产精品潘金| 日韩精品欧美精品| 亚洲精品国产品国语在线app| 久久香蕉国产线看观看99| 欧美日韩免费观看一区三区| av不卡在线播放| 国产一区二区电影| 久久精工是国产品牌吗| 午夜久久久久久| 亚洲综合男人的天堂| 欧美国产日本韩| 国产亚洲一区字幕| 日韩三级免费观看| 91精品国产综合久久福利| 在线视频你懂得一区二区三区| av中文一区二区三区| 国产精品一级黄| 国产乱码精品一品二品| 极品销魂美女一区二区三区| 日韩影院在线观看| 日韩精品一区第一页| 亚洲第一主播视频| 亚洲v精品v日韩v欧美v专区| 一区二区在线观看免费 | 欧美一区二区三区免费大片| 在线观看亚洲成人| 97超碰欧美中文字幕| 成人99免费视频| 91啪在线观看| 在线观看一区日韩| 精品视频在线免费| 欧美浪妇xxxx高跟鞋交| 欧美久久一二三四区| 欧美肥妇毛茸茸| 欧美一级一区二区| 欧美电视剧免费观看| 欧美成人在线直播| 久久久久国产精品人| 欧美高清一级片在线观看| 国产精品理论在线观看| 亚洲欧美怡红院| 一区二区三区中文字幕| 亚洲高清三级视频| 青青草国产成人99久久| 经典三级一区二区| 成人美女视频在线观看18| 99久久精品国产毛片| 欧洲一区二区三区在线| 91精品国产一区二区三区| 久久日韩精品一区二区五区| 中文字幕av一区二区三区高| 国产精品不卡在线观看| 午夜日韩在线观看| 国产一区二区三区观看| 成人va在线观看| 欧美性高清videossexo| 日韩欧美一区二区免费| 中文字幕av资源一区| 一区二区三区蜜桃| 久久疯狂做爰流白浆xx| 成人影视亚洲图片在线| 色哟哟在线观看一区二区三区| 欧美日韩激情一区二区三区| 精品国产髙清在线看国产毛片| 国产精品免费久久| 午夜精品久久久久久久久久久 | 亚洲线精品一区二区三区八戒| 青青草国产成人99久久| 丰满少妇久久久久久久| 在线观看视频欧美| 久久久久国产一区二区三区四区| 亚洲蜜臀av乱码久久精品| 琪琪久久久久日韩精品| 成人激情开心网| 91精品国产91久久久久久最新毛片| 久久久精品tv| 天天综合网 天天综合色| 国产a级毛片一区| 欧美一区二区视频网站| 国产精品大尺度| 精品一区二区国语对白| 色婷婷激情一区二区三区| 精品捆绑美女sm三区| 亚洲精品日日夜夜| 国产成人免费网站| 日韩限制级电影在线观看| 国产精品久久久久久久久图文区| 日韩电影在线观看一区| www.欧美日韩国产在线| 日韩精品一区二区在线| 亚洲一区二区在线免费观看视频| 国产成人在线看| 欧美一级日韩不卡播放免费| 悠悠色在线精品| 成人av电影在线观看| 亚洲精品一区二区三区四区高清 | 亚洲女同一区二区| 国产乱人伦精品一区二区在线观看| 欧美日韩在线三区| 亚洲欧洲制服丝袜| 国产成人av电影在线观看| 日韩一区国产二区欧美三区| 午夜视频在线观看一区二区 | 国产精品久久久久久久久免费樱桃| 美国欧美日韩国产在线播放| 精品视频色一区| 一区二区三区色| 色综合久久久久综合体| 亚洲欧美一区二区视频| 国产99久久久久| 久久久久久久久久久99999| 激情伊人五月天久久综合| 宅男噜噜噜66一区二区66| 亚洲v精品v日韩v欧美v专区| 在线国产亚洲欧美| 一区二区成人在线| 欧美专区日韩专区| 亚洲成年人影院| 911国产精品| 久久精品免费看| 久久蜜桃一区二区| 国内成人精品2018免费看| 精品剧情v国产在线观看在线| 久久99精品国产麻豆不卡| 日韩精品一区国产麻豆| 国产一区二区三区观看| 国产三级一区二区| 顶级嫩模精品视频在线看| 国产精品丝袜久久久久久app| 丰满岳乱妇一区二区三区| 国产女主播视频一区二区| 成人在线视频首页| 一区二区三区久久| 91精品国产综合久久久蜜臀粉嫩 | 日韩免费一区二区| 国产真实乱偷精品视频免| 国产婷婷精品av在线| 99久久久久久| 亚洲国产日产av| 91精品国产麻豆| 国产成人免费视频网站高清观看视频| 国产亚洲精品7777| 91视频免费播放| 天天爽夜夜爽夜夜爽精品视频| 日韩美女天天操| 国产精品一区二区在线观看不卡| 国产精品理伦片| 欧美日韩在线三级| 精品一区二区三区日韩| 国产精品国产馆在线真实露脸| 在线亚洲一区二区| 蜜臀av亚洲一区中文字幕|