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

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

?? os_tmr.c

?? STM32不完全手冊 例程源碼 29個
?? 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资源站| 1000精品久久久久久久久| 国产精品进线69影院| 国产精品成人一区二区艾草| 亚洲视频1区2区| 亚洲一二三区不卡| 天天爽夜夜爽夜夜爽精品视频| 亚洲一区成人在线| 天天色图综合网| 国产老肥熟一区二区三区| 91丝袜国产在线播放| 成人app软件下载大全免费| 色综合久久综合中文综合网| 在线亚洲+欧美+日本专区| 欧美丰满嫩嫩电影| 久久久亚洲精华液精华液精华液| 欧美国产一区在线| 一区二区三区中文字幕在线观看| 亚洲第一在线综合网站| 奇米色一区二区| 成人黄动漫网站免费app| 91九色02白丝porn| 精品国产成人系列| 亚洲另类春色校园小说| 免费在线观看成人| av一区二区不卡| 日韩午夜激情av| 国产精品久久久久久久久搜平片| 亚洲一二三级电影| 国产99久久久精品| 欧美精品在线视频| 日本一区二区三区久久久久久久久不| 亚洲欧洲精品一区二区三区不卡 | 奇米影视一区二区三区小说| 国产一区二区三区观看| 欧美色涩在线第一页| 久久青草国产手机看片福利盒子| 亚洲裸体在线观看| 国产乱妇无码大片在线观看| 欧美午夜宅男影院| 中文字幕av不卡| 另类小说欧美激情| 在线观看亚洲精品视频| 国产精品网站一区| 91福利视频久久久久| 欧美电影免费观看高清完整版在| 亚洲精品一二三四区| 国产一区在线观看视频| 欧美日韩aaa| 亚洲国产精品视频| 色94色欧美sute亚洲线路二| 国产欧美精品日韩区二区麻豆天美| 免费在线视频一区| 欧美午夜寂寞影院| 一区二区三区四区在线免费观看| 成人午夜视频在线观看| 久久精品亚洲麻豆av一区二区| 天天免费综合色| 欧美日韩国产精选| 亚洲一区二区四区蜜桃| 色综合久久综合网97色综合| 国产精品国产三级国产aⅴ入口 | 国产欧美视频一区二区三区| 免费一区二区视频| 在线成人小视频| 亚洲成av人**亚洲成av**| 色婷婷av一区二区三区之一色屋| 国产精品国产馆在线真实露脸 | 99国产精品久久久久久久久久| 亚洲精品一区二区在线观看| 免费观看30秒视频久久| 日韩亚洲欧美一区二区三区| 视频一区中文字幕国产| 69堂国产成人免费视频| 免费高清在线视频一区·| 欧美二区乱c少妇| 亚洲bdsm女犯bdsm网站| 91精品国产欧美一区二区| 免费观看在线综合| 久久久久久久久蜜桃| 黄页网站大全一区二区| 国产日韩av一区| 国产成人精品综合在线观看| 国产精品久久久久久久久晋中| av不卡免费电影| 亚洲永久精品国产| 欧美一区二区三区喷汁尤物| 国产盗摄女厕一区二区三区| 国产精品美女视频| 欧美性色欧美a在线播放| 视频一区二区不卡| 国产欧美日韩视频一区二区| 色综合天天综合在线视频| 亚洲国产精品久久人人爱蜜臀 | 国产精品日韩精品欧美在线| av网站免费线看精品| 亚洲成a人在线观看| 欧美r级电影在线观看| 成人一区二区三区| 亚洲成人精品影院| 久久亚洲精精品中文字幕早川悠里 | 欧美性猛交xxxxxx富婆| 男女性色大片免费观看一区二区| 国产精品沙发午睡系列990531| 欧美日韩一级片网站| 国产成人免费高清| 日韩黄色免费网站| 国产精品美女久久久久久久久 | 另类小说一区二区三区| 中文字幕欧美日本乱码一线二线| 色8久久精品久久久久久蜜| 久久99国产精品尤物| 亚洲精品日产精品乱码不卡| 精品免费日韩av| 欧美在线|欧美| 99久久久精品| 国产一区二区三区在线观看精品| 亚洲一线二线三线久久久| 国产拍揄自揄精品视频麻豆| 在线不卡的av| 91国在线观看| 成人午夜精品在线| 国产精品资源在线观看| 午夜视频在线观看一区二区| 国产精品初高中害羞小美女文| 日韩精品一区二区三区老鸭窝| 欧美日韩一区二区三区视频 | 一区二区三区精密机械公司| 日韩一级成人av| 欧美丰满一区二区免费视频| 一本大道久久a久久综合婷婷| 国产福利电影一区二区三区| 免费看日韩a级影片| 午夜精品久久久久久| 亚洲免费视频成人| 国产精品盗摄一区二区三区| 国产精品卡一卡二卡三| 久久蜜桃一区二区| 久久久精品免费网站| 精品免费视频.| 久久天堂av综合合色蜜桃网| 日韩一级黄色大片| 日韩一卡二卡三卡国产欧美| 3d动漫精品啪啪1区2区免费 | 色综合久久久久久久久| 97成人超碰视| 色综合久久久久综合体| 欧美综合天天夜夜久久| 在线看日韩精品电影| 欧美色图免费看| 欧美专区日韩专区| 777色狠狠一区二区三区| 欧美高清视频不卡网| 制服丝袜亚洲精品中文字幕| 日韩欧美在线123| 26uuu久久天堂性欧美| 中文天堂在线一区| 亚洲视频免费看| 五月天丁香久久| 久久99国产精品久久99| 国产成人免费网站| 波多野结衣亚洲一区| 欧美视频在线观看一区二区| 91精品黄色片免费大全| 久久久久九九视频| 亚洲欧美日韩国产手机在线| 天堂蜜桃91精品| 国产精品一卡二| 在线影视一区二区三区| 69堂国产成人免费视频| 久久久亚洲精华液精华液精华液| 中文字幕人成不卡一区| 五月天精品一区二区三区| 国产精品99久久久久久宅男| 91丨porny丨户外露出| 91麻豆精品国产91久久久久久久久 | 麻豆中文一区二区| 高清免费成人av| 欧美日韩在线综合| 久久精品人人做人人综合| 亚洲欧美激情小说另类| 久久国产视频网| 99精品国产视频| 精品奇米国产一区二区三区| 一区二区中文字幕在线| 日韩av一区二区在线影视| 99在线视频精品| 2017欧美狠狠色| 日韩主播视频在线| 色婷婷久久综合| 国产精品入口麻豆原神| 日韩精品一二三区| 一本一本大道香蕉久在线精品 |