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

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

?? windlib.c

?? vxworks 5.5 kernel code
?? C
?? 第 1 頁 / 共 3 頁
字號:
    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_WINDDELETE, (int) pTcb); 	/* log event */#endif    if (pTcb->status == WIND_READY)			/* if task is ready */	Q_REMOVE (&readyQHead, pTcb);			/* remove from queue */    else	{	if (pTcb->status & WIND_PEND)			/* if task is pended */            status = windPendQRemove (pTcb);            /* remove from queue */	if (pTcb->status & WIND_DELAY)			/* if task is delayed */	    Q_REMOVE (&tickQHead, &pTcb->tickNode);	/* remove from queue */	}    /* disconnect all the swap in hooks the task has connected to */    for (ix = 0, mask = pTcb->swapInMask; mask != 0; ix++, mask = mask << 1)	if (mask & 0x8000)	   taskSwapReference [ix] --;    /* disconnect all the swap out hooks the task has connected to */    for (ix = 0, mask = pTcb->swapOutMask; mask != 0; ix++, mask = mask << 1)	if (mask & 0x8000)	   taskSwapReference [ix] --;    Q_REMOVE (&activeQHead, &pTcb->activeNode);		/* deactivate it */    pTcb->status = WIND_DEAD;		       		/* kill it */    return (status);    }/********************************************************************************* windSuspend - suspend a task** Suspension is an additive state.  When a task is on the ready queue it* is removed and changed to suspended.  Otherwise, the status is updated* to include suspended in addition to the state it is already in.** NOMANUAL*/void windSuspend    (    FAST WIND_TCB *pTcb         /* address of task's tcb, 0 = current task */    )    {#ifdef WV_INSTRUMENTATION    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_WINDSUSPEND, (int) pTcb); 	/* log event */#endif    if (pTcb->status == WIND_READY)	Q_REMOVE (&readyQHead, pTcb);    pTcb->status |= WIND_SUSPEND;		/* update status */    }/********************************************************************************* windResume - resume a task** Resume the specified task and place in the ready queue if necessary.** NOMANUAL*/void windResume    (    FAST WIND_TCB *pTcb         /* task to resume */    )    {#ifdef WV_INSTRUMENTATION    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_WINDRESUME, (int) pTcb); 	/* log event */#endif    if (pTcb->status == WIND_SUSPEND)			/* just suspended so */	Q_PUT (&readyQHead, pTcb, pTcb->priority);	/* put in ready queue */    pTcb->status &= ~WIND_SUSPEND;		/* mask out the suspend state */    }/********************************************************************************* windPriNormalSet - set the normal priority of a task** Set the normal priority of a task.  A task will execute at its normal priority* as long as no priority inheritance has taken place.** NOMANUAL*/void windPriNormalSet    (    WIND_TCB    *pTcb,          /* address of task's tcb */    UINT         priNormal      /* new normal priority */    )    {    pTcb->priNormal = priNormal;	/* update normal priority */    windPrioritySet (pTcb, priNormal);	/* resort to appropriate priority */    }/********************************************************************************* windPrioritySet - resort the specified task to the appropriate priority** This routine sets the actual priority of task, taking into account priority* inversion safety.  If a task owns any priority inversion safety semaphores* then the priority will not be allowed to lower.** NOMANUAL*/void windPrioritySet    (    FAST WIND_TCB *pTcb,        /* address of task's tcb */    FAST UINT      priority     /* new priority */    )    {    /* if lowering the current priority and the task doesn't own any mutex     * semaphores with inheritance, then go ahead and lower current priority.     */    if ((pTcb->priMutexCnt == 0) && (pTcb->priority < priority))	{#ifdef WV_INSTRUMENTATION        /* windview - level 2 event logging */	EVT_TASK_3 (EVENT_WINDPRIORITYSETLOWER, (int) pTcb, 		pTcb->priority, priority);#endif	pTcb->priority = priority;		/* lower current priority */	if (pTcb->status == WIND_READY)		/* task is in ready Q? */	    {	    Q_RESORT (&readyQHead, pTcb, priority);	    }	else if (pTcb->status & WIND_PEND)	/* task is in pend Q? */	    {	    Q_RESORT (pTcb->pPendQ, pTcb, priority);	    }	return;					/* no inheritance if lowering */	}    while (pTcb->priority > priority)		/* current priority too low? */	{#ifdef WV_INSTRUMENTATION        /* windview - level 2 event logging */	EVT_TASK_3 (EVENT_WINDPRIORITYSETRAISE, (int) pTcb, 		pTcb->priority, priority);#endif	pTcb->priority = priority;		/* raise current priority */	if (pTcb->status == WIND_READY)		/* task is in ready Q? */	    {	    Q_RESORT (&readyQHead, pTcb, priority);	    }	else if (pTcb->status & WIND_PEND)	/* task is in pend Q? */	    {	    Q_RESORT (pTcb->pPendQ, pTcb, priority);	    if (pTcb->pPriMutex != NULL)	/* chain up for inheritance */		pTcb = pTcb->pPriMutex->semOwner;	    }	}    }/********************************************************************************* windSemDelete - delete a semaphore** Delete a semaphore and unblock any tasks pended on it.  Unblocked tasks* will be returned ERROR.** NOMANUAL*/void windSemDelete    (    FAST SEM_ID semId   /* semaphore to delete */    )    {    FAST WIND_TCB *pTcb;#ifdef WV_INSTRUMENTATION    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_WINDSEMDELETE, (int) semId);      /* log event */#endif    windPendQTerminate (&semId->qHead);			/* terminate pend q */    if ((semId->semType == SEM_TYPE_MUTEX) &&		/* mutex semaphore? */	((pTcb = semId->semOwner) != NULL) &&		/* is there an owner? */        (OBJ_VERIFY (&((WIND_TCB *)(pTcb))->objCore, taskClassId) == OK))	{	if ((semId->options & SEM_INVERSION_SAFE) &&	/* inversion safe opt?*/	    (-- pTcb->priMutexCnt == 0) && 		/* last mutex owned? */	    (pTcb->priority != pTcb->priNormal))	/* priority inherited?*/	    {	    windPrioritySet (pTcb, pTcb->priNormal);	/* back to normal pri */	    }	if ((semId->options & SEM_DELETE_SAFE) &&	/* deletion safe opt? */	    ((-- pTcb->safeCnt) == 0) &&		/* unsafe now? */	    (Q_FIRST (&pTcb->safetyQHead) != NULL))	/* deleters pended? */	    {	    windPendQFlush (&pTcb->safetyQHead); /* flush deleters */	    }	}    }/********************************************************************************* windTickAnnounce - acknowledge the passing of time** Process delay list.  Make tasks at the end of their delay, ready.* Perform round robin scheduling if selected.* Call any expired watchdog routines.** NOMANUAL*/void windTickAnnounce (void)    {    FAST Q_NODE *	pNode;	/* node of tick queue */    FAST WIND_TCB *	pTcb;	/* pointer to task control block */    FAST WDOG *		wdId;	/* pointer to a watchdog */    FUNCPTR		wdRtn;	/* watch dog routine to invoke */    int			wdArg;	/* watch dog argument to pass with wdRtn */    int 		status;	/* status return by Q_REMOVE */    /* advance and manage the tick queue */    vxTicks ++;						/* advance rel time */    vxAbsTicks++;					/* advance abs time */    Q_ADVANCE (&tickQHead);				/* advance tick queue */    while ((pNode = (Q_NODE *) Q_GET_EXPIRED (&tickQHead)) != NULL)	{	pTcb = (WIND_TCB *) ((int)pNode - OFFSET (WIND_TCB, tickNode));	if  (	    (pTcb->objCore.pObjClass == taskClassId)	/* is it a task? */#ifdef WV_INSTRUMENTATION 	    || (pTcb->objCore.pObjClass == taskInstClassId)#endif	    )	    { pTcb->status &= ~WIND_DELAY;		/* out of delay state */	    if (pTcb->status == WIND_READY)		/* taskDelay done */		{#ifdef WV_INSTRUMENTATION    		/* windview - level 2 event logging */		EVT_TASK_1 (EVENT_WINDTICKUNDELAY, (int) pTcb); #endif		taskRtnValueSet (pTcb, OK);		/* return OK */		}	    else if (pTcb->status & WIND_PEND)		/* semaphore timeout */		{                /*                 * if the task was pended on a shared semaphore                 * windPendQRemove can return :                 * ERROR if lock cannot be taken                 * ALREADY_REMOVED if the shared tcb is already removed                 * from the pend Q on the give side but has not                 * shows up on this side.                 */#ifdef WV_INSTRUMENTATION		 EVT_TASK_1 (EVENT_WINDTICKTIMEOUT, (int )pTcb); #endif                status = windPendQRemove (pTcb);        /* out of semaphore q */                switch (status)                    {                    case ALREADY_REMOVED:                        {                        /* the semaphore was given in time, return OK */                        taskRtnValueSet (pTcb, OK);                        break;                        }                    case ERROR:                        {                        taskRtnValueSet (pTcb, ERROR);      /* return ERROR */                        pTcb->errorStatus = S_smObjLib_LOCK_TIMEOUT;                        break;                        }                    default:                        {                        taskRtnValueSet (pTcb, ERROR);  /* return ERROR */                        pTcb->errorStatus = S_objLib_OBJ_TIMEOUT;                        }                    }		}	    if (pTcb->status == WIND_READY)		/* if ready, enqueue */		Q_PUT (&readyQHead, pTcb, pTcb->priority);	    }	else						/* must be a watchdog */	    {	    wdId = (WDOG *) ((int)pNode - OFFSET (WDOG, tickNode));#ifdef WV_INSTRUMENTATION    	    /* windview - level 2 event logging */	    EVT_TASK_1 (EVENT_WINDTICKANNOUNCETMRWD, (int) wdId);#endif	    wdId->status = WDOG_OUT_OF_Q;		/* mark as out of q */	    /* We get the watch dog routine and argument before testing	     * deferStartCnt to avoid having to lock interrupts.  The RACE	     * to worry about is a wdStart () or wdCancel () occuring after	     * the test of deferStartCnt and before invoking the routine.	     */	    wdRtn = wdId->wdRoutine;			/* get watch dog rtn */	    wdArg = wdId->wdParameter;			/* get watch dog arg */	    intCnt ++;                                  /* fake ISR context */	    if (wdId->deferStartCnt == 0)               /* check validity */		(* wdRtn) (wdArg);                      /* invoke wdog rtn */            intCnt --;                                  /* unfake ISR context */	    workQDoWork ();				/* do deferred work */	    }	}    /* perform round robin scheduling if selected */    if ((roundRobinOn) && (taskIdCurrent->lockCnt == 0) &&	(taskIdCurrent->status == WIND_READY) &&	(++ taskIdCurrent->tslice >= roundRobinSlice))	{#ifdef WV_INSTRUMENTATION    	/* windview - level 2 event logging */	EVT_TASK_0 (EVENT_WINDTICKANNOUNCETMRSLC);	/* log event */#endif	taskIdCurrent->tslice = 0;			/* reset time slice  */	Q_REMOVE (&readyQHead, taskIdCurrent);		/* no Q_RESORT here! */	Q_PUT (&readyQHead, taskIdCurrent, taskIdCurrent->priority);	}    }/********************************************************************************* windDelay - put running task asleep for specified ticks** Insert task in delay queue at correct spot dictated by the specified duration.** RETURNS: OK** NOMANUAL*/STATUS windDelay    (    FAST int timeout    )    {#ifdef WV_INSTRUMENTATION    /* windview - level 2 event logging */    EVT_TASK_1 (EVENT_WINDDELAY, timeout); 	/* log event */#endif    Q_REMOVE (&readyQHead, taskIdCurrent);		/* out of ready queue */    if ((unsigned)(vxTicks + timeout) < vxTicks)	/* rollover? */	{	Q_CALIBRATE (&tickQHead, ~vxTicks + 1);	vxTicks = 0;	}    Q_PUT (&tickQHead, &taskIdCurrent->tickNode, timeout + vxTicks);    taskIdCurrent->status |= WIND_DELAY;		/* set delay status */    return (OK);    }/********************************************************************************* windUndelay - wake a sleeping task up*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91搞黄在线观看| 一本久久a久久精品亚洲| 一区二区三区免费网站| 欧美二区乱c少妇| 99精品欧美一区二区蜜桃免费| 日韩av电影天堂| 亚洲精品一二三区| 日本一区二区视频在线观看| 欧美福利视频一区| 色哟哟欧美精品| 国产91在线观看| 蜜臀av一级做a爰片久久| 亚洲美女视频一区| 欧美激情一区二区三区不卡 | 奇米亚洲午夜久久精品| |精品福利一区二区三区| 国产无遮挡一区二区三区毛片日本 | 麻豆精品在线视频| 亚洲电影欧美电影有声小说| 亚洲欧美一区二区三区极速播放 | 亚洲国产成人av网| |精品福利一区二区三区| 久久久美女艺术照精彩视频福利播放| 精品污污网站免费看| 99精品视频在线播放观看| 国产成人在线看| 国产老女人精品毛片久久| 极品尤物av久久免费看| 美女看a上一区| 久久超碰97中文字幕| 亚洲成在人线在线播放| 亚洲成人免费av| 亚洲成人资源在线| 亚洲午夜一区二区| 亚洲一区二区在线播放相泽| 亚洲美女精品一区| 亚洲精品欧美专区| 亚洲精品国产一区二区三区四区在线| 国产日韩精品一区二区浪潮av | ww亚洲ww在线观看国产| 欧美不卡一区二区| 久久久国产午夜精品| 中文字幕成人网| 国产精品久线在线观看| 亚洲欧美一区二区三区国产精品 | 日韩精品电影在线| 日韩电影在线一区| 国产曰批免费观看久久久| 国产成a人亚洲| 99久免费精品视频在线观看| 色成年激情久久综合| 日本精品一区二区三区高清| 欧美性生交片4| 91麻豆精品国产91| 久久综合久久综合久久综合| 国产精品你懂的在线| 日韩一区在线免费观看| 亚洲一区免费视频| 日本欧美久久久久免费播放网| 久久狠狠亚洲综合| 国产成人av一区二区三区在线观看| 成人午夜av在线| 日本高清视频一区二区| 777xxx欧美| 久久久精品天堂| 亚洲色图另类专区| 调教+趴+乳夹+国产+精品| 久久99国产精品麻豆| 国产91在线观看丝袜| 91精品办公室少妇高潮对白| 7777女厕盗摄久久久| 国产女主播一区| 亚洲国产cao| 国内精品伊人久久久久av一坑| 成人av网站在线| 中文字幕第一区综合| 久久久久一区二区三区四区| 亚洲一区在线电影| 亚洲三级小视频| 亚洲天堂网中文字| 亚洲视频中文字幕| 国产一区二区三区视频在线播放| 日本欧美一区二区三区乱码| 人禽交欧美网站| 国产精品美女久久久久aⅴ国产馆| 国产精一区二区三区| 色综合天天综合网天天狠天天| 欧美精品久久99久久在免费线| 国产亚洲综合av| 一区二区三区在线影院| 国产露脸91国语对白| 欧美人体做爰大胆视频| 国产日韩亚洲欧美综合| 日韩精品一级中文字幕精品视频免费观看 | 亚洲欧美日韩国产成人精品影院| 秋霞国产午夜精品免费视频| 成人ar影院免费观看视频| 日韩视频在线你懂得| 亚洲免费资源在线播放| 国产一区二区调教| 欧美日韩国产一二三| 欧美国产激情二区三区| 日韩有码一区二区三区| 成人app网站| 国产亚洲一本大道中文在线| 手机精品视频在线观看| 91黄视频在线观看| 国产精品国产三级国产普通话99| 精品在线免费观看| 日韩亚洲欧美一区二区三区| 亚洲一级不卡视频| 国产大片一区二区| 丝袜国产日韩另类美女| 欧美色图激情小说| 亚洲国产成人高清精品| 99精品视频一区| 中文字幕人成不卡一区| 欧美丰满高潮xxxx喷水动漫| 欧美老肥妇做.爰bbww视频| 99精品在线观看视频| 国产精品九色蝌蚪自拍| 91小宝寻花一区二区三区| 久久久久久久综合日本| 国产伦精品一区二区三区视频青涩 | 91福利区一区二区三区| 国产精品你懂的在线| 91视频在线看| 亚洲同性同志一二三专区| 91精品福利视频| 日韩福利视频导航| 国产亚洲美州欧州综合国| 国产在线播放一区二区三区| 国产精品福利一区二区三区| 一本到高清视频免费精品| 午夜精品久久久久久不卡8050| 在线91免费看| 国产91丝袜在线播放0| 中文字幕在线观看不卡视频| caoporn国产一区二区| 亚洲成人精品在线观看| 欧美不卡一二三| 欧美色区777第一页| 亚洲精品日日夜夜| 成人永久aaa| 69av一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 五月天中文字幕一区二区| 国产精品影视在线观看| 欧美影院午夜播放| 亚洲精品视频在线观看网站| 国产一区二区三区蝌蚪| 国产日韩欧美制服另类| 成人免费电影视频| 亚洲三级在线看| 337p亚洲精品色噜噜狠狠| 日本视频一区二区三区| 精品久久久久一区二区国产| 国产精品一区二区久久精品爱涩| 亚洲欧洲美洲综合色网| 91香蕉国产在线观看软件| 亚洲午夜视频在线| 日韩一区二区高清| 国产成人精品影院| 亚洲国产综合人成综合网站| 欧美大片免费久久精品三p| 丁香五精品蜜臀久久久久99网站 | 日韩成人dvd| 精品国偷自产国产一区| yourporn久久国产精品| 天天操天天综合网| 国产欧美日韩激情| 欧美综合亚洲图片综合区| 久久精品国产一区二区| 中文字幕欧美一| 欧美一三区三区四区免费在线看| 国产成人在线影院| 一级女性全黄久久生活片免费| 日韩视频在线永久播放| 99麻豆久久久国产精品免费优播| 天天亚洲美女在线视频| 国产精品素人一区二区| 欧美日韩大陆一区二区| 国产精品白丝av| 日日欢夜夜爽一区| 日韩美女精品在线| xnxx国产精品| 欧美肥妇毛茸茸| 99精品欧美一区二区蜜桃免费| 麻豆成人免费电影| 亚洲精品日日夜夜| 久久久久久夜精品精品免费| 欧美日韩激情一区二区三区| 成人看片黄a免费看在线| 日本特黄久久久高潮| 亚洲乱码国产乱码精品精小说| 欧美成人video| 国产亚洲人成网站| 欧美一区二区三区在| 一本到三区不卡视频| 懂色av中文字幕一区二区三区|