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

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

?? os_tmr.c

?? ucos移植到S3C2410上的代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
        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];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区在线看| 中文字幕在线不卡| 欧美高清在线精品一区| 亚洲中国最大av网站| 国内成人精品2018免费看| 色哟哟在线观看一区二区三区| 在线播放欧美女士性生活| 亚洲一区国产视频| 国产精品一区在线| 日韩一区和二区| 亚洲免费在线电影| 国产不卡在线播放| 日韩精品一区二区三区视频播放| 亚洲老妇xxxxxx| 成人蜜臀av电影| 国产日韩影视精品| 精品一区二区三区蜜桃| 欧美人体做爰大胆视频| 1024成人网| 成年人国产精品| 中文字幕精品一区二区精品绿巨人| 另类专区欧美蜜桃臀第一页| 欧美老女人第四色| 亚洲一区二区三区免费视频| 色综合网色综合| 亚洲色欲色欲www| 91麻豆国产福利在线观看| 国产精品日韩成人| 成人午夜看片网址| 中文字幕视频一区二区三区久| 成人免费毛片aaaaa**| 国产欧美综合在线观看第十页| 韩国一区二区视频| 久久九九影视网| 成人激情动漫在线观看| 国产精品麻豆一区二区| av在线一区二区| 综合色天天鬼久久鬼色| 91黄视频在线观看| 亚洲一区二区三区中文字幕在线| 欧美三级在线播放| 肉色丝袜一区二区| 精品久久一区二区| 国产成人自拍网| 18成人在线观看| 欧美性大战xxxxx久久久| 亚洲高清中文字幕| 精品欧美一区二区久久| 国产精品888| 亚洲摸摸操操av| 精品视频一区二区不卡| 久久成人精品无人区| 欧美激情一二三区| 91丝袜美腿高跟国产极品老师| 亚洲成人动漫av| 久久婷婷成人综合色| yourporn久久国产精品| 亚洲国产精品久久久久秋霞影院 | 亚洲自拍偷拍综合| 91精品婷婷国产综合久久| 精品一区二区三区蜜桃| 国产精品久久网站| 欧美精品一二三| 丰满岳乱妇一区二区三区| 一区二区三区中文免费| 日韩精品中文字幕在线不卡尤物 | 国产精品嫩草影院com| 99re66热这里只有精品3直播| 亚洲成av人在线观看| 欧美tickling挠脚心丨vk| 99在线精品一区二区三区| 水蜜桃久久夜色精品一区的特点| 久久综合久久99| 91高清视频在线| 国产高清亚洲一区| 三级成人在线视频| 日韩理论电影院| 26uuu另类欧美亚洲曰本| 在线观看国产精品网站| 国产成人精品影院| 日韩av一区二| 亚洲免费视频中文字幕| 久久久久久久久久久电影| 欧美日韩另类一区| 99riav久久精品riav| 精品无人码麻豆乱码1区2区 | 色婷婷综合久久久| 韩国成人精品a∨在线观看| 亚洲第一在线综合网站| 一区精品在线播放| 久久久亚洲欧洲日产国码αv| 制服视频三区第一页精品| 91在线免费看| 丁香激情综合五月| 国精产品一区一区三区mba桃花 | 亚洲激情图片小说视频| 中文天堂在线一区| 久久综合久久鬼色| 日韩精品一区二区三区中文精品| 欧美色图第一页| 99国产精品一区| youjizz久久| 不卡的看片网站| 岛国精品一区二区| 99在线热播精品免费| 国产91精品精华液一区二区三区| 久久99国内精品| 麻豆久久久久久| 免费三级欧美电影| 久久精品国产网站| 国内一区二区在线| 国产精品一区二区91| 国产麻豆日韩欧美久久| 国产精品69毛片高清亚洲| 国产一区二区美女| 国产成人免费视频一区| 成人一区在线观看| www.色精品| 日本高清无吗v一区| 色婷婷国产精品综合在线观看| 91亚洲精品乱码久久久久久蜜桃| 99久久久久久99| 欧美精品在线一区二区三区| 91精品国产综合久久久久久久| 欧美日韩一级片网站| 欧美久久久久中文字幕| 日韩女优毛片在线| 久久精品水蜜桃av综合天堂| 久久久精品黄色| 国产精品久久久久国产精品日日| 国产精品毛片久久久久久| 亚洲人成网站精品片在线观看| 亚洲精品久久久蜜桃| 天涯成人国产亚洲精品一区av| 日韩av一区二| 国产91丝袜在线18| 成人动漫一区二区在线| 欧美在线三级电影| 欧美成人精品1314www| 日本一区二区三区四区| 一区二区三区免费网站| 免费高清视频精品| 国产jizzjizz一区二区| 欧美色男人天堂| 国产欧美一区二区精品性色| 亚洲色图在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 福利一区二区在线| 欧美日韩免费电影| 亚洲国产经典视频| 五月天国产精品| 成人免费av网站| 欧美一卡在线观看| 亚洲精品乱码久久久久久日本蜜臀| 天天色综合成人网| 白白色 亚洲乱淫| 欧美一级xxx| 亚洲资源中文字幕| 国产91丝袜在线18| 日韩欧美亚洲国产精品字幕久久久 | 精品国偷自产国产一区| **欧美大码日韩| 国产在线播放一区| 欧美日韩日日骚| 1区2区3区精品视频| 久久国产精品99久久久久久老狼| 欧洲精品视频在线观看| 国产调教视频一区| 精品一区二区三区不卡| 欧洲视频一区二区| 国产精品视频第一区| 久久www免费人成看片高清| 91国产丝袜在线播放| 国产精品卡一卡二卡三| 紧缚捆绑精品一区二区| 欧美精品 国产精品| 一区二区三区四区在线播放| 国产成都精品91一区二区三| 欧美一区二区在线看| 亚洲一区二区三区三| 91免费版在线| 国产精品的网站| 成人午夜视频免费看| 久久久久久久性| 久久激情综合网| 91精品国产免费| 亚洲国产色一区| 在线影院国内精品| 亚洲卡通动漫在线| 91福利精品第一导航| 亚洲精品老司机| 欧美一级视频精品观看| 香蕉影视欧美成人| 欧美日韩在线电影| 亚洲国产另类精品专区| 欧美在线免费观看视频| 一区av在线播放| 欧美在线观看视频一区二区| 亚洲三级在线免费观看| 91视频观看免费|