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

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

?? os_tmr.c

?? 大家快來下載。這是目前最新管方版本了,Micrium-uCOS-II-V284.zip
?? C
?? 第 1 頁 / 共 4 頁
字號:
             *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 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_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 {
                          OSTmr_Unlock();
                          *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)((void *)ptmr, callback_arg);   /* ... using the 'callback_arg' provided in call    */
                      } else {
                          OSTmr_Unlock();
                          *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    : 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜成人在线视频| 国产精品一区二区在线看| 午夜欧美电影在线观看| 激情伊人五月天久久综合| 99精品视频在线观看| 日韩亚洲欧美一区二区三区| 中文字幕一区二| 韩国三级中文字幕hd久久精品| 色8久久精品久久久久久蜜| 精品欧美久久久| 亚洲国产精品久久久久秋霞影院 | 欧美日韩成人综合| 中文av一区特黄| 久久se精品一区二区| 91国产成人在线| 国产午夜精品福利| 久久不见久久见免费视频7| 欧美日韩国产首页| 亚洲综合久久久久| 99麻豆久久久国产精品免费优播| 日韩午夜激情av| 日韩电影在线一区二区| 色婷婷精品大在线视频| 日本一区二区综合亚洲| 国产一区二区三区观看| 日韩视频永久免费| 日韩精品乱码av一区二区| 在线观看一区二区视频| 亚洲男人的天堂在线观看| 波多野结衣精品在线| 中文字幕免费一区| 成人网页在线观看| 国产精品国产精品国产专区不蜜| 国产精品一卡二卡| 欧美经典三级视频一区二区三区| 黑人巨大精品欧美一区| 精品国产制服丝袜高跟| 国产专区欧美精品| 国产欧美一区二区精品性色超碰 | 丁香婷婷综合网| 国产日韩欧美麻豆| 成人黄色电影在线| 亚洲视频小说图片| 欧美日韩视频在线观看一区二区三区| 国产精品蜜臀在线观看| 成人动漫av在线| 亚洲色图丝袜美腿| 欧美吞精做爰啪啪高潮| 亚洲va中文字幕| 日韩欧美一区二区免费| 国产精品综合网| 日本一区二区动态图| 色综合久久综合网欧美综合网| 亚洲免费视频成人| 欧美亚洲综合网| 青椒成人免费视频| 国产欧美日韩视频一区二区| 成人综合婷婷国产精品久久| 亚洲男人天堂av网| 欧美一区二区三区视频| 国产专区综合网| 亚洲精品欧美在线| 日韩一区二区麻豆国产| 懂色av噜噜一区二区三区av| 一区二区三区在线观看国产| 日韩一区二区在线看| 成人高清视频在线| 肉丝袜脚交视频一区二区| 久久午夜国产精品| 色偷偷88欧美精品久久久| 青青草97国产精品免费观看 | 亚洲欧洲一区二区在线播放| 欧美三级电影一区| 福利视频网站一区二区三区| 亚洲精品成a人| 久久亚洲一区二区三区明星换脸 | 亚洲乱码国产乱码精品精的特点| 欧美日韩一区二区三区高清 | 日本国产一区二区| 久久国产生活片100| 亚洲男人的天堂在线观看| 日韩美女视频在线| 欧美亚洲综合久久| 国产一区二区三区黄视频 | 国产精品黄色在线观看| 3751色影院一区二区三区| 成人高清免费观看| 精品一区二区在线看| 一区二区三区中文免费| 国产三级一区二区| 欧美一区二区三区四区高清| 色欧美88888久久久久久影院| 韩国av一区二区三区在线观看| 亚洲午夜一二三区视频| 国产精品欧美一区二区三区| 欧美电视剧在线看免费| 欧美日精品一区视频| 欧美色偷偷大香| 成人高清视频在线| 国产精品一卡二卡在线观看| 日本免费在线视频不卡一不卡二| 一区二区三区四区蜜桃| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲一区欧美一区| 国产精品免费看片| 久久精品一区八戒影视| 欧美一a一片一级一片| 91在线观看视频| 国产成人综合网| 国产精品一品二品| 国产在线视频不卡二| 蜜桃久久av一区| 久久精品国产一区二区| 日本不卡视频一二三区| 婷婷久久综合九色综合伊人色| 亚洲最大成人综合| 一区二区三区加勒比av| 一区二区三区日韩精品视频| 国产精品日日摸夜夜摸av| 国产精品你懂的在线| 国产精品欧美久久久久一区二区 | 国产精品每日更新在线播放网址 | 欧美三级电影在线看| 日本道精品一区二区三区| 一本久久a久久精品亚洲| 99久久er热在这里只有精品15| 成人开心网精品视频| 成人黄色在线看| 日本精品一级二级| 欧美亚洲动漫精品| 欧美一级欧美三级| 欧美大度的电影原声| 国产午夜精品一区二区三区视频| 久久久不卡网国产精品一区| 欧美国产精品v| 亚洲免费观看高清完整版在线| 亚洲永久精品国产| 日韩av电影天堂| 国产乱人伦精品一区二区在线观看 | 精品电影一区二区| 久久久久久亚洲综合影院红桃| 精品国产免费一区二区三区四区| 国产亚洲一区字幕| 亚洲综合无码一区二区| 天堂资源在线中文精品| 麻豆精品视频在线| 成人自拍视频在线| 在线观看日韩毛片| 精品国产91洋老外米糕| 日韩美女视频一区二区 | 一色屋精品亚洲香蕉网站| 亚洲伦在线观看| 免费的成人av| 丁香天五香天堂综合| 欧美性猛交xxxx黑人交| 久久一日本道色综合| 亚洲一区二区三区四区在线| 久久69国产一区二区蜜臀| 色悠悠亚洲一区二区| 日韩免费一区二区三区在线播放| 亚洲欧美在线视频观看| 免费观看久久久4p| 91看片淫黄大片一级在线观看| 日韩欧美不卡一区| 亚洲久本草在线中文字幕| 国产一区在线不卡| 欧美日韩激情一区| 亚洲欧洲在线观看av| 美女久久久精品| 91久久精品一区二区三区| 久久久久久久av麻豆果冻| 五月天激情小说综合| 99久精品国产| 国产婷婷一区二区| 久久精品国产精品亚洲综合| 色8久久人人97超碰香蕉987| 久久综合九色综合97婷婷| 日韩在线一区二区三区| 色一区在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美videofree性高清杂交| 国产欧美一区二区精品性色| 蜜臀久久99精品久久久久宅男| fc2成人免费人成在线观看播放| 欧美mv和日韩mv国产网站| 亚欧色一区w666天堂| 97成人超碰视| 国产女人aaa级久久久级 | 亚洲六月丁香色婷婷综合久久 | 久久久精品影视| 久久国产福利国产秒拍| 这里只有精品免费| 香蕉久久夜色精品国产使用方法| 色网综合在线观看| 中文字幕一区三区| av一区二区三区四区| 1000精品久久久久久久久| 成人性色生活片| 欧美国产综合一区二区| 丁香激情综合国产|