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

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

?? os_tmr.c

?? 移植好的UCOS2.86版
?? C
?? 第 1 頁 / 共 3 頁
字號:
    if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
        *perr = OS_ERR_TMR_INVALID_TYPE;
        return (0);
    }
    if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
        *perr = OS_ERR_TMR_ISR;
        return (0);
    }
    OSTmr_Lock();
    switch (ptmr->OSTmrState) {
        case OS_TMR_STATE_RUNNING:
             remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
             OSTmr_Unlock();
             *perr  = OS_NO_ERR;
             return (remain);

        case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */
             switch (ptmr->OSTmrOpt) {
                 case OS_TMR_OPT_PERIODIC:
                      if (ptmr->OSTmrDly == 0) {
                          remain = ptmr->OSTmrPeriod;
                      } else {
                          remain = ptmr->OSTmrDly;
                      }
                      OSTmr_Unlock();
                      *perr  = OS_NO_ERR;
                      break;

                 case OS_TMR_OPT_ONE_SHOT:
                      remain = ptmr->OSTmrDly;
                      OSTmr_Unlock();
                      *perr  = OS_NO_ERR;
                      break;
             }
             return (remain);

        case OS_TMR_STATE_COMPLETED:                   /* Only ONE-SHOT that timed out can be in this state           */
             OSTmr_Unlock();
             *perr  = OS_NO_ERR;
             return (0);

        case OS_TMR_STATE_UNUSED:
             OSTmr_Unlock();
             *perr  = OS_ERR_TMR_INACTIVE;
             return (0);

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

/*$PAGE*/
/*
************************************************************************************************************************
*                                    FIND OUT WHAT STATE A TIMER IS IN
*
* Description: This function is called to determine what state the timer is in:
*
*                  OS_TMR_STATE_UNUSED     the timer has not been created
*                  OS_TMR_STATE_STOPPED    the timer has been created but has not been started or has been stopped
*                  OS_TMR_COMPLETED        the timer is in ONE-SHOT mode and has completed it's timeout
*                  OS_TMR_RUNNING          the timer is currently running
*
* Arguments  : ptmr          Is a pointer to the desired timer
*
*              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
*                               OS_NO_ERR
*                               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 call was made from an ISR
*                               OS_ERR_TMR_INACTIVE       'ptmr' points to a timer that is not active
*                               OS_ERR_TMR_INVALID_STATE  if the timer is not in a valid state
*
* Returns    : The current state of the timer (see description).
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
INT8U  OSTmrStateGet (OS_TMR  *ptmr,
                      INT8U   *perr)
{
    INT8U  state;


#if OS_ARG_CHK_EN > 0
    if (perr == (INT8U *)0) {
        return (0);
    }
    if (ptmr == (OS_TMR *)0) {
        *perr = OS_ERR_TMR_INVALID;
        return (0);
    }
#endif
    if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
        *perr = OS_ERR_TMR_INVALID_TYPE;
        return (0);
    }
    if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
        *perr = OS_ERR_TMR_ISR;
        return (0);
    }
    OSTmr_Lock();
    state = ptmr->OSTmrState;
    switch (state) {
        case OS_TMR_STATE_UNUSED:   
        case OS_TMR_STATE_STOPPED:  
        case OS_TMR_STATE_COMPLETED:
        case OS_TMR_STATE_RUNNING:  
             *perr = OS_NO_ERR;
             break;
             
        default:
             *perr = OS_ERR_TMR_INVALID_STATE;
             break;
    }
    OSTmr_Unlock();
    return (state);
}
#endif

/*$PAGE*/
/*
************************************************************************************************************************
*                                                   START A TIMER
*
* Description: This function is called by your application code to create and start a timer.
*
* Arguments  : ptmr          Is a pointer to an OS_TMR
*
*              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
*                               OS_NO_ERR
*                               OS_ERR_TMR_INVALID
*                               OS_ERR_TMR_INVALID_TYPE    'ptmr'  is not pointing to an OS_TMR
*                               OS_ERR_TMR_ISR             if the call was made from an ISR
*                               OS_ERR_TMR_INACTIVE        if the timer was not created
*                               OS_ERR_TMR_INVALID_STATE   the timer is in an invalid state
*
* Returns    : OS_TRUE    if the timer was started
*              OS_FALSE   if an error was detected
************************************************************************************************************************
*/

#if OS_TMR_EN > 0
BOOLEAN  OSTmrStart (OS_TMR   *ptmr,
                     INT8U    *perr)
{
#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:                          /* Restart the timer                                      */
             OSTmr_Unlink(ptmr);                            /* ... Stop the timer                                     */
             OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
             OSTmr_Unlock();
             *perr = OS_NO_ERR;
             return (OS_TRUE);

        case OS_TMR_STATE_STOPPED:                          /* Start the timer                                        */
        case OS_TMR_STATE_COMPLETED:
             OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
             OSTmr_Unlock();
             *perr = OS_NO_ERR;
             return (OS_TRUE);

        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 and delete a timer.
*
* Arguments  : ptmr          Is a pointer to the timer to stop and delete.
*
*              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_NO_ERR
*                               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 the call was successful (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_NO_ERR;
             switch (opt) {
                 case OS_TMR_OPT_CALLBACK:
                      pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
                      if (pfnct != (OS_TMR_CALLBACK)0) {
                          (*pfnct)(ptmr, ptmr->OSTmrCallbackArg); /* ... using the 'argument' specified @ creation    */
                      } else {
                          *perr = OS_ERR_TMR_NO_CALLBACK;
                          return (OS_FALSE);
                      }
                      break;

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

                 case OS_TMR_OPT_NONE:
                      break;

                 default:
                     OSTmr_Unlock();
                     *perr = OS_ERR_TMR_INVALID_OPT;
                     return (OS_FALSE);
             }
             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    : none
************************************************************************************************************************
*/

#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);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a天堂v人片| 国产亚洲va综合人人澡精品| 91精品国产入口| 欧美r级在线观看| 亚洲国产精品国自产拍av| 日韩精品中午字幕| 在线不卡一区二区| 欧美成人一区二区三区片免费| 日韩欧美亚洲国产精品字幕久久久| 日韩一区二区不卡| 久久久噜噜噜久久中文字幕色伊伊 | 精品国产欧美一区二区| 91精品国产高清一区二区三区| 91蝌蚪国产九色| 欧美久久久久免费| 国产女主播视频一区二区| 国产精品美女久久久久久| 亚洲欧美偷拍卡通变态| 午夜私人影院久久久久| 国产精品一区二区在线看| 99久久久无码国产精品| 91精品国产综合久久精品图片| 精品粉嫩超白一线天av| 欧美嫩在线观看| 欧美一级欧美一级在线播放| 久久久国产精华| 亚洲免费在线视频一区 二区| ...av二区三区久久精品| 视频一区中文字幕| 色综合久久中文综合久久97| 日韩一级片在线观看| 又紧又大又爽精品一区二区| 国产suv一区二区三区88区| 日韩一区二区电影在线| 麻豆国产一区二区| 7777精品伊人久久久大香线蕉| 亚洲精品日韩综合观看成人91| 成人丝袜高跟foot| √…a在线天堂一区| 97精品久久久午夜一区二区三区| 精品久久久久久最新网址| 免费成人在线网站| 日韩精品一区二区三区中文不卡| 亚洲一二三四久久| 欧美日韩精品欧美日韩精品一综合| 久久久久九九视频| 91麻豆精品国产自产在线| 亚洲狠狠爱一区二区三区| 欧美丝袜丝nylons| 毛片基地黄久久久久久天堂| 久久综合五月天婷婷伊人| 国产盗摄精品一区二区三区在线| 国产精品第13页| 日本黄色一区二区| 奇米影视一区二区三区| 国产午夜精品一区二区| 91福利在线看| 国内精品国产成人国产三级粉色| 国产精品沙发午睡系列990531| 99精品视频中文字幕| 亚洲午夜激情av| 国产亚洲欧美色| 欧美日韩高清一区| 精品一区二区综合| 久久久久久久网| 国产精品亚洲专一区二区三区| 欧美国产激情一区二区三区蜜月| 国产一区999| 一区二区三区在线高清| 久久久久国产一区二区三区四区| 欧美伊人久久久久久久久影院| 国产一区在线观看麻豆| 偷窥少妇高潮呻吟av久久免费| 国产精品网曝门| 久久久久久久久久久电影| 欧美日韩一区久久| 91在线免费播放| 丁香六月综合激情| 久久国产精品99久久久久久老狼| 亚洲国产sm捆绑调教视频| 亚洲日本在线天堂| 亚洲欧美日韩一区二区三区在线观看| 久久天堂av综合合色蜜桃网| 欧美一区二区三区免费观看视频| 欧美日韩在线免费视频| 99久久99久久精品免费看蜜桃 | 亚洲午夜精品久久久久久久久| 亚洲精品国产视频| 欧美激情一区二区三区全黄| 91精品国产高清一区二区三区蜜臀| 成人黄色一级视频| 成人蜜臀av电影| 成人激情开心网| 成人视屏免费看| 欧美日韩精品系列| 欧美日韩不卡视频| 欧美大片免费久久精品三p| 久久综合九色综合97婷婷女人| 国产欧美视频一区二区| 亚洲黄网站在线观看| 亚洲成a人片在线观看中文| 亚洲国产精品久久久男人的天堂| 亚洲成人免费av| 处破女av一区二区| 欧美日韩国产一级| 国产人妖乱国产精品人妖| 亚洲综合色视频| 福利电影一区二区| 日本乱人伦一区| 欧美综合久久久| 国产亚洲精品超碰| 久久91精品久久久久久秒播| 成人黄色av网站在线| 欧美成人精品福利| 首页综合国产亚洲丝袜| caoporen国产精品视频| 欧美一区二区三区人| 亚洲天堂免费看| 国产一区二区剧情av在线| 欧美午夜电影网| 亚洲欧美电影院| 国产精品一区免费视频| 在线播放一区二区三区| 专区另类欧美日韩| 国产成人精品亚洲午夜麻豆| 91激情五月电影| 中文字幕一区二区日韩精品绯色| 美女久久久精品| 色菇凉天天综合网| 天堂影院一区二区| 欧洲精品在线观看| 国产精品入口麻豆九色| 日韩激情视频在线观看| 欧美日韩综合在线免费观看| 亚洲欧美日韩国产一区二区三区| 成人免费视频视频| 一区二区三区在线播| 欧美体内she精高潮| 洋洋成人永久网站入口| 欧美日韩日日夜夜| 韩国毛片一区二区三区| 久久久久久久综合色一本| 国产凹凸在线观看一区二区| |精品福利一区二区三区| 欧美在线色视频| 蜜桃一区二区三区在线| 国产日产欧美一区| 欧美精品第1页| 成人涩涩免费视频| 亚洲午夜电影网| 国产网红主播福利一区二区| 色狠狠一区二区三区香蕉| 午夜精品成人在线| 中文字幕av一区二区三区| 欧美综合亚洲图片综合区| 激情文学综合网| 自拍视频在线观看一区二区| 欧美一区二区三区思思人| 91麻豆蜜桃一区二区三区| 韩国精品主播一区二区在线观看| 午夜久久久影院| 中文字幕在线不卡国产视频| 欧美亚洲动漫另类| 高清成人在线观看| 麻豆精品精品国产自在97香蕉| 亚洲欧美日韩一区二区三区在线观看| 91在线视频18| 成人免费av在线| 美女视频黄免费的久久| 亚洲女同女同女同女同女同69| 欧美卡1卡2卡| 欧美午夜电影网| 色综合一个色综合| 色综合视频一区二区三区高清| 成人午夜视频福利| 久久99精品久久只有精品| 爽爽淫人综合网网站| 亚洲成人你懂的| 午夜精品久久一牛影视| 亚洲韩国精品一区| 欧美bbbbb| 91精品福利在线一区二区三区 | 日韩欧美一区在线| 日日噜噜夜夜狠狠视频欧美人 | 依依成人综合视频| 精品国产乱码久久| 久久久久国产精品免费免费搜索| 国产亚洲欧美色| 国产精品女同一区二区三区| 国产精品动漫网站| 亚洲一区二区三区自拍| 日本亚洲视频在线| 成人一区二区视频| 色综合久久久久综合体| 欧美美女激情18p| 久久久久久久久久久久久久久99 | 天天做天天摸天天爽国产一区| 午夜精品久久久久久不卡8050| 毛片av一区二区三区| 97精品久久久久中文字幕|