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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_tmr.c

?? VC版式的 UCOSII ! 修改前人255任務(wù)的那個(gè)版本! 已經(jīng)改為286u版! 可用VC6直接編過(guò)!
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
        case OS_TMR_STATE_UNUSED:                           /* Timer not created                                      */
             OSTmr_Unlock();
             *perr = OS_ERR_TMR_INACTIVE;
             return (OS_FALSE);

        default:
             OSTmr_Unlock();
             *perr = OS_ERR_TMR_INVALID_STATE;
             return (OS_FALSE);
    }
}
#endif

/*$PAGE*/
/*
************************************************************************************************************************
*                                                   STOP A TIMER
*
* Description: This function is called by your application code to stop a timer.
*
* Arguments  : ptmr          Is a pointer to the timer to stop.
*
*              opt           Allows you to specify an option to this functions which can be:
*
*                               OS_TMR_OPT_NONE          Do nothing special but stop the timer
*                               OS_TMR_OPT_CALLBACK      Execute the callback function, pass it the callback argument
*                                                        specified when the timer was created.
*                               OS_TMR_OPT_CALLBACK_ARG  Execute the callback function, pass it the callback argument
*                                                        specified in THIS function call
*
*              callback_arg  Is a pointer to a 'new' callback argument that can be passed to the callback function
*                               instead of the timer's callback argument.  In other words, use 'callback_arg' passed in
*                               THIS function INSTEAD of ptmr->OSTmrCallbackArg
*
*              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
*                               OS_ERR_NONE
*                               OS_ERR_TMR_INVALID         'ptmr' is a NULL pointer
*                               OS_ERR_TMR_INVALID_TYPE    'ptmr'  is not pointing to an OS_TMR
*                               OS_ERR_TMR_ISR             if the function was called from an ISR
*                               OS_ERR_TMR_INACTIVE        if the timer was not created
*                               OS_ERR_TMR_INVALID_OPT     if you specified an invalid option for 'opt'
*                               OS_ERR_TMR_STOPPED         if the timer was already stopped
*                               OS_ERR_TMR_INVALID_STATE   the timer is in an invalid state
*                               OS_ERR_TMR_NO_CALLBACK     if the timer does not have a callback function defined
*
* Returns    : OS_TRUE       If we stopped the timer (if the timer is already stopped, we also return OS_TRUE)
*              OS_FALSE      If not
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
BOOLEAN  OSTmrStop (OS_TMR  *ptmr,
                    INT8U    opt,
                    void    *callback_arg,
                    INT8U   *perr)
{
    OS_TMR_CALLBACK  pfnct;


#if OS_ARG_CHK_EN > 0
    if (perr == (INT8U *)0) {                                     /* Validate arguments                               */
        return (OS_FALSE);
    }
    if (ptmr == (OS_TMR *)0) {
        *perr = OS_ERR_TMR_INVALID;
        return (OS_FALSE);
    }
#endif
    if (ptmr->OSTmrType != OS_TMR_TYPE) {                         /* Validate timer structure                         */
        *perr = OS_ERR_TMR_INVALID_TYPE;
        return (OS_FALSE);
    }
    if (OSIntNesting > 0) {                                       /* See if trying to call from an ISR                */
        *perr  = OS_ERR_TMR_ISR;
        return (OS_FALSE);
    }
    OSTmr_Lock();
    switch (ptmr->OSTmrState) {
        case OS_TMR_STATE_RUNNING:
             OSTmr_Unlink(ptmr);                                  /* Remove from current wheel spoke                  */
             *perr = OS_ERR_NONE;
             switch (opt) {
                 case OS_TMR_OPT_CALLBACK:
                      pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
                      if (pfnct != (OS_TMR_CALLBACK)0) {
                          (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg);  /* Use callback arg when timer was created */
                      } else {
                          *perr = OS_ERR_TMR_NO_CALLBACK;
                      }
                      break;

                 case OS_TMR_OPT_CALLBACK_ARG:
                      pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
                      if (pfnct != (OS_TMR_CALLBACK)0) {
                          (*pfnct)((void *)ptmr, callback_arg);   /* ... using the 'callback_arg' provided in call    */
                      } else {
                          *perr = OS_ERR_TMR_NO_CALLBACK;
                      }
                      break;

                 case OS_TMR_OPT_NONE:
                      break;

                 default:
                     *perr = OS_ERR_TMR_INVALID_OPT;
                     break;
             }
             OSTmr_Unlock();
             return (OS_TRUE);

        case OS_TMR_STATE_COMPLETED:                              /* Timer has already completed the ONE-SHOT or ...  */
        case OS_TMR_STATE_STOPPED:                                /* ... timer has not started yet.                   */
             OSTmr_Unlock();
             *perr = OS_ERR_TMR_STOPPED;
             return (OS_TRUE);

        case OS_TMR_STATE_UNUSED:                                 /* Timer was not created                            */
             OSTmr_Unlock();
             *perr = OS_ERR_TMR_INACTIVE;
             return (OS_FALSE);

        default:
             OSTmr_Unlock();
             *perr = OS_ERR_TMR_INVALID_STATE;
             return (OS_FALSE);
    }
}
#endif

/*$PAGE*/
/*
************************************************************************************************************************
*                                      SIGNAL THAT IT'S TIME TO UPDATE THE TIMERS
*
* Description: This function is typically called by the ISR that occurs at the timer tick rate and is used to signal to
*              OSTmr_Task() that it's time to update the timers.
*
* Arguments  : none
*
* Returns    : OS_ERR_NONE         The call was successful and the timer task was signaled.
*              OS_ERR_SEM_OVF      If OSTmrSignal() was called more often than OSTmr_Task() can handle the timers.  
*                                  This would indicate that your system is heavily loaded.
*              OS_ERR_EVENT_TYPE   Unlikely you would get this error because the semaphore used for signaling is created 
*                                  by uC/OS-II.
*              OS_ERR_PEVENT_NULL  Again, unlikely you would ever get this error because the semaphore used for signaling 
*                                  is created by uC/OS-II.
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
INT8U  OSTmrSignal (void)
{
    INT8U  err;


    err = OSSemPost(OSTmrSemSignal);
    return (err);
}
#endif

/*$PAGE*/
/*
************************************************************************************************************************
*                                               ALLOCATE AND FREE A TIMER
*
* Description: This function is called to allocate a timer.
*
* Arguments  : none
*
* Returns    : a pointer to a timer if one is available
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
static  OS_TMR  *OSTmr_Alloc (void)
{
    OS_TMR *ptmr;


    if (OSTmrFreeList == (OS_TMR *)0) {
        return ((OS_TMR *)0);
    }
    ptmr            = (OS_TMR *)OSTmrFreeList;
    OSTmrFreeList   = (OS_TMR *)ptmr->OSTmrNext;
    ptmr->OSTmrNext = (OS_TCB *)0;
    ptmr->OSTmrPrev = (OS_TCB *)0;
    OSTmrUsed++;
    OSTmrFree--;
    return (ptmr);
}
#endif


/*
************************************************************************************************************************
*                                             RETURN A TIMER TO THE FREE LIST
*
* Description: This function is called to return a timer object to the free list of timers.
*
* Arguments  : ptmr     is a pointer to the timer to free
*
* Returns    : none
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
static  void  OSTmr_Free (OS_TMR *ptmr)
{
    ptmr->OSTmrState       = OS_TMR_STATE_UNUSED;      /* Clear timer object fields                                   */
    ptmr->OSTmrOpt         = OS_TMR_OPT_NONE;
    ptmr->OSTmrPeriod      = 0;
    ptmr->OSTmrMatch       = 0;
    ptmr->OSTmrCallback    = (OS_TMR_CALLBACK)0;
    ptmr->OSTmrCallbackArg = (void *)0;
#if OS_TMR_CFG_NAME_SIZE > 1
    ptmr->OSTmrName[0]     = '?';                      /* Unknown name                                                */
    ptmr->OSTmrName[1]     = OS_ASCII_NUL;
#endif

    ptmr->OSTmrPrev        = (OS_TCB *)0;              /* Chain timer to free list                                    */
    ptmr->OSTmrNext        = OSTmrFreeList;
    OSTmrFreeList          = ptmr;

    OSTmrUsed--;                                       /* Update timer object statistics                              */
    OSTmrFree++;
}
#endif

/*$PAGE*/
/*
************************************************************************************************************************
*                                                    INITIALIZATION
*                                          INITIALIZE THE FREE LIST OF TIMERS
*
* Description: This function is called by OSInit() to initialize the free list of OS_TMRs.
*
* Arguments  : none
*
* Returns    : none
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
void  OSTmr_Init (void)
{
#if OS_EVENT_NAME_SIZE > 10
    INT8U    err;
#endif
    INT16U   i;
    OS_TMR  *ptmr1;
    OS_TMR  *ptmr2;


    OS_MemClr((INT8U *)&OSTmrTbl[0],      sizeof(OSTmrTbl));            /* Clear all the TMRs                         */
    OS_MemClr((INT8U *)&OSTmrWheelTbl[0], sizeof(OSTmrWheelTbl));       /* Clear the timer wheel                      */

    ptmr1 = &OSTmrTbl[0];
    ptmr2 = &OSTmrTbl[1];
    for (i = 0; i < (OS_TMR_CFG_MAX - 1); i++) {                        /* Init. list of free TMRs                    */
        ptmr1->OSTmrType    = OS_TMR_TYPE;
        ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                      /* Indicate that timer is inactive            */
        ptmr1->OSTmrNext    = (void *)ptmr2;                            /* Link to next timer                         */
#if OS_TMR_CFG_NAME_SIZE > 1
        ptmr1->OSTmrName[0] = '?';                                      /* Unknown name                               */
        ptmr1->OSTmrName[1] = OS_ASCII_NUL;
#endif
        ptmr1++;
        ptmr2++;
    }
    ptmr1->OSTmrType    = OS_TMR_TYPE;
    ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                          /* Indicate that timer is inactive            */
    ptmr1->OSTmrNext    = (void *)0;                                    /* Last OS_TMR                                */
#if OS_TMR_CFG_NAME_SIZE > 1
    ptmr1->OSTmrName[0] = '?';                                          /* Unknown name                               */
    ptmr1->OSTmrName[1] = OS_ASCII_NUL;
#endif
    OSTmrTime           = 0;
    OSTmrUsed           = 0;
    OSTmrFree           = OS_TMR_CFG_MAX;
    OSTmrFreeList       = &OSTmrTbl[0];

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成人一区二区在线观看| 激情丁香综合五月| 亚洲精品伦理在线| 国产精品久久久久久久午夜片| 亚洲国产高清aⅴ视频| 久久嫩草精品久久久久| 精品美女在线观看| 久久综合色天天久久综合图片| 亚洲精品一区二区三区影院| 欧美成va人片在线观看| 精品免费一区二区三区| 精品国产乱码久久久久久老虎| 精品久久久久久久人人人人传媒 | 欧美伊人久久久久久午夜久久久久| 一本久久综合亚洲鲁鲁五月天| 日本精品免费观看高清观看| 欧美在线一区二区| 欧美一区二区三区四区高清| 欧美一级国产精品| 一区二区三区免费在线观看| 亚洲激情图片一区| 亚洲午夜av在线| 日韩av网站在线观看| 黄色资源网久久资源365| 国产成人一级电影| 91蜜桃婷婷狠狠久久综合9色| 欧美在线999| 欧美一级免费观看| 亚洲国产精品99久久久久久久久| 国产精品污污网站在线观看| 一区二区三区在线免费播放 | 国产不卡免费视频| 91蜜桃网址入口| 制服丝袜亚洲色图| 国产视频一区二区在线观看| 亚洲情趣在线观看| 日日噜噜夜夜狠狠视频欧美人 | 精品一区二区三区影院在线午夜 | wwww国产精品欧美| 国产精品乱人伦| 亚洲成人激情社区| 国产精品夜夜嗨| 欧美怡红院视频| 国产午夜精品美女毛片视频| 亚洲制服丝袜av| 激情欧美一区二区三区在线观看| 91最新地址在线播放| 欧美日韩情趣电影| 久久亚洲私人国产精品va媚药| 亚洲人妖av一区二区| 蜜桃视频第一区免费观看| 国产xxx精品视频大全| 欧美日韩中字一区| 亚洲国产精品国自产拍av| 视频一区在线播放| 欧美mv日韩mv国产网站app| 欧美国产激情一区二区三区蜜月 | 成人精品视频一区| 7777精品伊人久久久大香线蕉经典版下载 | 欧美日韩国产欧美日美国产精品| 久久久蜜桃精品| 亚洲成a人片在线观看中文| 国产成人午夜高潮毛片| 欧美日韩精品一区二区三区四区| 亚洲国产精品传媒在线观看| 秋霞成人午夜伦在线观看| 91尤物视频在线观看| 精品国内片67194| 亚洲不卡一区二区三区| 成年人网站91| 久久精品日产第一区二区三区高清版 | 久久亚洲私人国产精品va媚药| 亚洲综合久久久| aaa亚洲精品| 久久色成人在线| 视频精品一区二区| 色呦呦国产精品| 日韩一区在线播放| 成人免费视频网站在线观看| 日韩精品一区二区在线| 亚洲成a人片在线不卡一二三区| 99综合影院在线| 欧美激情综合在线| 国产一区二区成人久久免费影院 | 亚洲愉拍自拍另类高清精品| 成人夜色视频网站在线观看| 久久美女高清视频| 韩国v欧美v亚洲v日本v| 日韩三区在线观看| 美女网站色91| 在线综合视频播放| 天天操天天综合网| 欧美日韩国产在线观看| 亚洲精品国产精品乱码不99| 91农村精品一区二区在线| 中文字幕二三区不卡| 成熟亚洲日本毛茸茸凸凹| 国产亚洲精品久| 国产福利一区二区| 久久精品夜色噜噜亚洲aⅴ| 国产尤物一区二区| 国产日韩精品视频一区| 国产一区在线观看麻豆| 久久久三级国产网站| 国产成人在线视频网站| 中文字幕欧美激情一区| 成年人国产精品| 亚洲免费在线视频一区 二区| 91麻豆国产福利精品| 亚洲香蕉伊在人在线观| 在线播放视频一区| 男人的j进女人的j一区| 精品国产乱码久久久久久免费 | 国产aⅴ精品一区二区三区色成熟| 久久综合中文字幕| 高清不卡一区二区| 国产成人精品亚洲777人妖 | 亚洲精品国产高清久久伦理二区| 97精品电影院| 亚洲一区在线播放| 欧美一区二区在线观看| 国精品**一区二区三区在线蜜桃| 久久久精品欧美丰满| 成人ar影院免费观看视频| 又紧又大又爽精品一区二区| 欧洲av在线精品| 天天综合天天综合色| 精品欧美一区二区三区精品久久| 国产一区二区网址| 中文字幕一区二区三区不卡在线 | 久久综合给合久久狠狠狠97色69| 国产大陆精品国产| 亚洲精选在线视频| 9191精品国产综合久久久久久| 蜜桃精品在线观看| 国产欧美日产一区| 在线观看91视频| 久久精品国产一区二区三区免费看| 国产亚洲综合av| 欧美中文字幕久久| 国产一区二区久久| 亚洲乱码中文字幕| 日韩免费观看高清完整版| 成人福利视频网站| 日韩精品国产欧美| 国产欧美日韩卡一| 538在线一区二区精品国产| 国产精品亚洲第一| 亚洲成人自拍偷拍| 国产欧美日韩精品在线| 欧美卡1卡2卡| 成人美女在线观看| 视频在线观看91| 国产精品国模大尺度视频| 欧美一区二区三区免费大片 | 91.麻豆视频| 不卡一二三区首页| 蜜臀av一级做a爰片久久| 中文字幕在线观看不卡视频| 欧美福利视频一区| 99视频在线观看一区三区| 免费视频最近日韩| ...xxx性欧美| 久久蜜桃av一区精品变态类天堂| 欧美系列日韩一区| caoporn国产一区二区| 六月婷婷色综合| 午夜久久久久久久久 | 粉嫩嫩av羞羞动漫久久久| 视频一区二区欧美| 亚洲欧美电影一区二区| 久久男人中文字幕资源站| 欧美日本不卡视频| 91免费在线视频观看| 国产91在线看| 久久国产精品99久久久久久老狼| 亚洲亚洲精品在线观看| 中文字幕一区二区三区在线播放 | 欧美女孩性生活视频| 成人av在线影院| 久久国产精品免费| 性做久久久久久久免费看| 亚洲欧美电影院| 中文字幕中文字幕在线一区| 26uuu国产日韩综合| 欧美一级视频精品观看| 在线观看亚洲一区| 91网页版在线| 国产成人精品一区二| 欧美丰满美乳xxx高潮www| 91影视在线播放| caoporm超碰国产精品| 国产盗摄一区二区| 国内成人精品2018免费看| 日本亚洲三级在线| 天天av天天翘天天综合网| 亚洲影视在线播放| 一区二区三区在线高清| 夜夜精品视频一区二区| 亚洲欧美一区二区三区极速播放 |