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

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

?? os_tmr.c

?? uCOS-II學習資料
?? 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一区| 日韩**一区毛片| 亚洲国产欧美另类丝袜| 亚洲精品欧美专区| 亚洲尤物在线视频观看| 一区二区三区不卡视频在线观看 | 99re这里只有精品视频首页| 国产资源精品在线观看| 国产精品一区二区免费不卡| 久久激五月天综合精品| 狠狠色综合日日| 大桥未久av一区二区三区中文| 国产精品99久久久| www.日本不卡| 色婷婷久久久亚洲一区二区三区 | 国产经典欧美精品| 成人一级片网址| 91视频一区二区三区| 色爱区综合激月婷婷| 欧美剧情电影在线观看完整版免费励志电影| 日本丰满少妇一区二区三区| 欧美日韩免费视频| 日韩视频一区二区三区在线播放| 精品欧美一区二区三区精品久久| 精品国产凹凸成av人网站| 日韩精品在线网站| 国产精品国产三级国产有无不卡| 伊人色综合久久天天人手人婷| 天天色综合成人网| 另类小说图片综合网| aaa国产一区| 91精品国产综合久久久久久久久久| 日韩一区二区三区四区| 久久久久9999亚洲精品| 亚洲人吸女人奶水| 久久精品二区亚洲w码| 9i在线看片成人免费| 欧美一区二区福利视频| 国产欧美一区二区精品仙草咪| 亚洲精选在线视频| 国产一区二区伦理| 欧美人伦禁忌dvd放荡欲情| 精品粉嫩aⅴ一区二区三区四区| 亚洲色图另类专区| 极品美女销魂一区二区三区免费| 91蜜桃网址入口| 国产亚洲午夜高清国产拍精品| 一卡二卡欧美日韩| 国产成a人无v码亚洲福利| 3751色影院一区二区三区| 成人免费一区二区三区在线观看| 日韩精品国产欧美| 91浏览器入口在线观看| 久久综合九色综合97婷婷女人| 亚洲午夜免费福利视频| 丁香啪啪综合成人亚洲小说| 日韩写真欧美这视频| 亚洲成人在线免费| 99免费精品视频| 国产女人18毛片水真多成人如厕| 日韩精品国产欧美| 欧美日韩三级一区二区| 亚洲欧美日韩久久| 不卡一卡二卡三乱码免费网站| 日韩女优制服丝袜电影| 香蕉久久一区二区不卡无毒影院| 一本大道久久a久久综合| 国产精品午夜电影| 国产高清一区日本| 久久亚洲一区二区三区明星换脸| 蓝色福利精品导航| 日韩欧美专区在线| 美国毛片一区二区| 日韩一区二区在线观看视频播放| 亚洲高清免费观看| 精品视频在线免费看| 亚洲黄色小说网站| 色嗨嗨av一区二区三区| 亚洲一区二区三区在线| 在线观看视频一区二区欧美日韩| 亚洲免费av在线| 92精品国产成人观看免费| 亚洲色图视频网| 欧美少妇一区二区| 日韩国产高清在线| 日韩一区二区中文字幕| 狠狠色丁香婷婷综合久久片| 国产亚洲综合性久久久影院| 国产河南妇女毛片精品久久久| 欧美经典一区二区三区| 国产99精品国产| 亚洲免费观看高清| 欧美三区免费完整视频在线观看| 亚洲成av人片一区二区三区| 日韩欧美成人激情| 国产不卡视频在线观看| 综合婷婷亚洲小说| 在线精品观看国产| 麻豆精品在线观看| 国产精品网站一区| 99久久婷婷国产综合精品电影| 亚洲美女视频在线观看| 欧美精品123区| 国产成a人无v码亚洲福利| 一区二区三区在线观看视频| 91麻豆精品国产91久久久久久久久 | 极品尤物av久久免费看| 欧美激情综合五月色丁香小说| 色婷婷狠狠综合| 日本不卡视频在线| 国产精品麻豆网站| 91.com在线观看| 成人app软件下载大全免费| 亚洲图片自拍偷拍| 国产欧美一区二区精品性色 | 国产视频一区二区在线观看| 99久久精品国产精品久久| 视频一区视频二区中文| 国产三级一区二区| 欧美欧美午夜aⅴ在线观看| 国内成人免费视频| 夜夜精品视频一区二区 | 91玉足脚交白嫩脚丫在线播放| 午夜私人影院久久久久| 欧美国产精品v| 欧美成人一区二区三区| 色综合久久九月婷婷色综合| 国产一区二区主播在线| 午夜欧美在线一二页| 国产精品美女久久久久高潮| 欧美v国产在线一区二区三区| 欧美亚洲国产一区二区三区| 国产福利一区二区三区视频| 欧美aaaaaa午夜精品| 亚洲午夜精品一区二区三区他趣| 国产精品嫩草久久久久| 日韩精品一区二区三区老鸭窝| 欧美视频三区在线播放| 99久久久免费精品国产一区二区| 狠狠色丁香九九婷婷综合五月| 五月婷婷欧美视频| 亚洲小说春色综合另类电影| 国产精品理论在线观看| 国产亚洲欧洲一区高清在线观看| 日韩欧美在线观看一区二区三区| 欧美三级在线播放| 91黄色激情网站| 91官网在线免费观看| jlzzjlzz亚洲日本少妇| 成人av午夜影院| 成人污视频在线观看| 国产馆精品极品| 国产成人丝袜美腿| 国产91精品精华液一区二区三区 | 91小视频免费看| 不卡av在线网| 色综合咪咪久久| 91福利国产精品| 欧美日韩成人综合| 欧美日韩国产一区二区三区地区| 欧美系列在线观看| 欧美一区二区视频观看视频| 91精品国产丝袜白色高跟鞋| 91精品综合久久久久久| 欧美一二三四区在线| 欧美成人vr18sexvr| 久久久亚洲高清| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 在线看不卡av| 欧美喷水一区二区| 欧美大白屁股肥臀xxxxxx| 精品免费视频.| 欧美国产丝袜视频| 一区二区三区四区激情| 亚洲愉拍自拍另类高清精品| 日韩在线卡一卡二| 国产精品一区二区在线播放| 99久久婷婷国产综合精品| 欧美日韩一区久久| 精品91自产拍在线观看一区| 国产嫩草影院久久久久| 亚洲精选视频在线| 捆绑调教美女网站视频一区| 丁香激情综合五月| 欧美亚洲国产怡红院影院| 精品国产免费人成电影在线观看四季| 久久久久久免费| 一区二区三区欧美在线观看| 青青草原综合久久大伊人精品| 国产精品自拍一区| 91国偷自产一区二区三区观看| 欧美一级片免费看| 综合av第一页| 久久精品国产澳门| 色诱视频网站一区| 久久综合色8888| 亚洲福利视频一区| 国产999精品久久久久久| 欧美日韩激情一区二区|