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

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

?? os_tmr.c

?? keil mdk 3.22下移植的uCOS II 2.83
?? C
?? 第 1 頁 / 共 3 頁
字號:
    }
#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();
    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--;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久线看在观草草青青| 亚洲无人区一区| 精品欧美一区二区在线观看| 欧美男人的天堂一二区| 在线观看91精品国产麻豆| 欧美亚洲精品一区| 制服丝袜激情欧洲亚洲| 欧美精品自拍偷拍动漫精品| 欧美一区二区三区婷婷月色 | 在线免费视频一区二区| 色8久久精品久久久久久蜜| 91日韩一区二区三区| 色94色欧美sute亚洲线路一久| 91国偷自产一区二区三区成为亚洲经典 | 国精品**一区二区三区在线蜜桃| 蜜乳av一区二区| 国产美女久久久久| www.视频一区| 欧美日韩一级黄| 精品久久久久一区二区国产| 久久综合九色综合欧美亚洲| 国产视频一区二区在线观看| 亚洲啪啪综合av一区二区三区| 亚洲自拍都市欧美小说| 美腿丝袜亚洲色图| 夫妻av一区二区| 欧美午夜宅男影院| 26uuu另类欧美亚洲曰本| 国产精品入口麻豆九色| 亚洲高清一区二区三区| 久久国产免费看| 99精品在线观看视频| 欧美巨大另类极品videosbest | 亚洲麻豆国产自偷在线| 日韩激情中文字幕| 粉嫩aⅴ一区二区三区四区 | 高清在线成人网| 99精品视频中文字幕| 51精品秘密在线观看| 国产欧美日韩亚州综合| 亚洲v日本v欧美v久久精品| 国产一区二区三区香蕉| 91黄色在线观看| 国产亚洲短视频| 日韩精品乱码免费| 97se亚洲国产综合自在线观| 日韩欧美国产系列| 亚洲视频一区二区在线观看| 麻豆一区二区三区| 在线欧美小视频| 国产精品你懂的| 久久 天天综合| 欧美日韩亚洲综合一区 | 99麻豆久久久国产精品免费优播| 欧美日韩免费观看一区二区三区| 精品国产一区a| 天堂va蜜桃一区二区三区漫画版| 成人精品电影在线观看| 欧美变态口味重另类| 天堂久久久久va久久久久| 色天天综合久久久久综合片| 亚洲国产精华液网站w| 国产一区二区中文字幕| 日韩欧美一级精品久久| 午夜欧美大尺度福利影院在线看 | 一区二区三区毛片| 99久久免费精品高清特色大片| 国产夜色精品一区二区av| 蜜臀久久99精品久久久久久9| 成人av免费网站| 国产农村妇女精品| 国产91精品一区二区麻豆亚洲| 久久蜜桃av一区精品变态类天堂| 免费成人小视频| 日韩欧美一区二区在线视频| 亚洲一区二区高清| 91香蕉视频mp4| 亚洲色图一区二区三区| 91色在线porny| 亚洲视频在线观看一区| 色综合色综合色综合色综合色综合| 久久亚洲二区三区| 国产一区二区三区不卡在线观看 | 99精品视频中文字幕| 国产精品卡一卡二| av激情成人网| 亚洲精品日日夜夜| 在线观看日韩电影| 五月婷婷激情综合| 日韩欧美视频在线| 国产乱子伦视频一区二区三区| 欧美精品一区二区三区久久久 | 九色综合狠狠综合久久| 精品国产露脸精彩对白| 国产精品99久久久久久久vr| 日本一区二区三区在线观看| 国v精品久久久网| 亚洲精品成a人| 欧美乱妇20p| 国产一区二区三区四| 国产精品天美传媒沈樵| 在线看国产一区二区| 日韩国产在线观看一区| 久久精品亚洲国产奇米99| 成人中文字幕合集| 亚洲小说春色综合另类电影| 欧美成人性福生活免费看| 国产精品一区二区视频| 亚洲一区免费视频| 日韩精品一区二区三区老鸭窝 | 日韩欧美另类在线| 国产成人在线观看| 午夜精品福利一区二区三区蜜桃| 精品国产电影一区二区| 91在线视频网址| 久久精品国产一区二区| 亚洲人精品一区| 日韩精品一区二区三区swag | 日韩精品一区二区三区三区免费 | 在线综合亚洲欧美在线视频| 国产成人亚洲综合a∨猫咪| 亚洲不卡av一区二区三区| 亚洲国产精品成人综合色在线婷婷| 欧美色图第一页| 国产91在线|亚洲| 天堂成人免费av电影一区| 亚洲素人一区二区| 久久午夜国产精品| 欧美精品久久一区二区三区| av在线一区二区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产麻豆一精品一av一免费| 一区二区三区日韩在线观看| 国产日产欧美一区二区视频| 欧美一区二区三区视频免费| a在线欧美一区| 国产成人免费视频| 黄页视频在线91| 免费av成人在线| 午夜电影久久久| 亚洲国产色一区| 亚洲色图.com| 国产精品不卡在线| 日本一区二区高清| 久久午夜电影网| 久久久www免费人成精品| 日韩欧美国产午夜精品| 日韩视频在线永久播放| 欧美三级午夜理伦三级中视频| 99久久国产综合色|国产精品| 国产精品99久久久久久有的能看 | 国产精品二区一区二区aⅴ污介绍| 精品日韩在线观看| 日韩一区二区在线观看视频播放| 欧美日韩久久久久久| 欧美日韩国产在线观看| 欧美色图第一页| 欧美区视频在线观看| 9191久久久久久久久久久| 欧美日韩成人综合在线一区二区| 欧美亚洲一区二区在线| 欧美日韩国产一区| 欧美一级精品在线| 精品av久久707| 久久久久97国产精华液好用吗| 久久精品在线观看| 国产精品久久久久久久浪潮网站 | 国产精品系列在线| 国产精品全国免费观看高清| 国产精品久久久久久久久快鸭| 1024成人网| 亚洲成人动漫一区| 久久精品国产99国产| 国产一区二区三区香蕉| av日韩在线网站| 欧美日韩精品一区二区三区蜜桃| 欧美一区二区日韩| 久久蜜桃av一区精品变态类天堂| 国产精品福利一区二区三区| 国产精品女同一区二区三区| 夜夜嗨av一区二区三区四季av| 午夜精品一区二区三区三上悠亚 | 国产精品家庭影院| 亚洲综合久久av| 精品中文字幕一区二区小辣椒| 国产成人综合在线观看| 精品视频999| 久久尤物电影视频在线观看| 亚洲女性喷水在线观看一区| 免费视频最近日韩| www.亚洲在线| 日韩免费高清av| 亚洲柠檬福利资源导航| 奇米四色…亚洲| 91免费观看视频| www久久精品| 亚洲免费观看在线视频| 国产一本一道久久香蕉| 色噜噜狠狠色综合欧洲selulu| 精品美女被调教视频大全网站|