亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久91精品国产91久久小草| 午夜欧美电影在线观看| 99精品国产视频| 自拍偷拍欧美精品| 在线看一区二区| 五月天亚洲婷婷| 精品国产污污免费网站入口 | 亚洲国产你懂的| 777亚洲妇女| 精品无码三级在线观看视频| 久久久蜜桃精品| 不卡一区二区三区四区| 一个色妞综合视频在线观看| 91精品视频网| 国产激情一区二区三区四区 | 精品国产露脸精彩对白| 懂色中文一区二区在线播放| 亚洲免费观看高清完整版在线观看熊| 欧美性色aⅴ视频一区日韩精品| 天堂va蜜桃一区二区三区| 亚洲精品在线三区| 91亚洲永久精品| 日韩电影免费一区| 亚洲国产精品av| 欧美三级日韩在线| 国产一区二区三区不卡在线观看| 成人欧美一区二区三区小说| 欧美精品久久一区| 国产成人精品免费| 亚欧色一区w666天堂| 欧美精品一区二区精品网| 99re这里只有精品首页| 日本美女视频一区二区| 国产精品婷婷午夜在线观看| 欧美日韩精品三区| 国产精品12区| 亚洲成国产人片在线观看| 久久欧美中文字幕| 欧美色爱综合网| 国产成人av电影在线播放| 亚洲一区二区在线免费观看视频| www久久久久| 欧美性xxxxx极品少妇| 国产精品一线二线三线精华| 亚洲成人福利片| 日本一区二区视频在线观看| 欧美美女激情18p| 成人激情小说网站| 久久精品理论片| 一区二区三区四区在线免费观看| 精品99999| 欧美日韩视频第一区| 成人h动漫精品一区二| 蜜桃视频一区二区| 亚洲免费看黄网站| 国产婷婷精品av在线| 欧美卡1卡2卡| 91在线无精精品入口| 国产一区二区三区蝌蚪| 天天色图综合网| 亚洲特级片在线| 国产视频一区不卡| 日韩欧美另类在线| 欧美性一级生活| 97国产一区二区| 国产电影一区二区三区| 日本麻豆一区二区三区视频| 一区二区三区精品视频在线| 中文字幕+乱码+中文字幕一区| 欧美大片在线观看一区二区| 欧美午夜片在线观看| 99精品国产99久久久久久白柏| 国产精品亚洲第一区在线暖暖韩国| 丝袜美腿亚洲一区| 一区二区三区欧美久久| 国产精品高潮呻吟| 国产欧美日韩另类一区| 精品国产一区二区国模嫣然| 欧美一区二区成人6969| 欧美日韩国产高清一区| 日本丰满少妇一区二区三区| 波多野结衣精品在线| 国产在线精品一区二区不卡了 | 91精品久久久久久蜜臀| 欧美中文字幕一二三区视频| 91日韩一区二区三区| 成人午夜电影网站| 国产a区久久久| 国产麻豆欧美日韩一区| 极品销魂美女一区二区三区| 麻豆精品精品国产自在97香蕉| 丝瓜av网站精品一区二区| 亚洲丰满少妇videoshd| 一区二区三区高清在线| 一区二区在线观看av| 亚洲视频 欧洲视频| 国产精品第一页第二页第三页| 亚洲国产精品av| 国产精品热久久久久夜色精品三区| 国产亚洲欧美激情| 国产无人区一区二区三区| 久久久精品日韩欧美| 久久久久免费观看| 久久精品网站免费观看| 久久精品亚洲精品国产欧美kt∨| 久久久91精品国产一区二区精品| 精品国产百合女同互慰| 欧美变态tickling挠脚心| 精品久久人人做人人爽| 精品国产网站在线观看| 久久久久久久久久电影| 久久久精品免费免费| 日本一区二区成人在线| 国产精品国产三级国产| 亚洲精品国产一区二区三区四区在线| 亚洲乱码国产乱码精品精可以看 | 午夜精品久久久久久久99水蜜桃| 亚洲午夜av在线| 日韩精品国产精品| 免费xxxx性欧美18vr| 激情综合色播激情啊| 国产一区91精品张津瑜| 成人一级视频在线观看| 91日韩在线专区| 欧美日韩免费电影| 日韩一区二区在线看| 久久亚洲精品小早川怜子| 国产日本一区二区| 亚洲欧美精品午睡沙发| 亚洲高清不卡在线观看| 人人狠狠综合久久亚洲| 国产一区美女在线| 99视频在线精品| 在线视频一区二区三区| 制服视频三区第一页精品| 精品免费日韩av| 国产精品美日韩| 亚洲永久免费视频| 免费欧美日韩国产三级电影| 国产精品一区在线观看乱码| 99精品久久免费看蜜臀剧情介绍 | 91官网在线观看| 欧美丰满高潮xxxx喷水动漫| 日韩精品一区二区三区四区| 亚洲国产成人午夜在线一区| 亚洲精品日日夜夜| 麻豆成人av在线| 成人黄色小视频在线观看| 欧美优质美女网站| 欧美mv日韩mv| 中文字幕亚洲电影| 日韩国产欧美三级| 国产成人免费高清| 欧洲中文字幕精品| 欧美v国产在线一区二区三区| 国产精品你懂的| 婷婷久久综合九色国产成人| 国产成人在线免费观看| 欧美性猛片aaaaaaa做受| 精品成人a区在线观看| 亚洲色图.com| 久久成人免费电影| 色综合天天综合网国产成人综合天 | 成人av集中营| 777午夜精品视频在线播放| 中文字幕二三区不卡| 午夜伦欧美伦电影理论片| 粉嫩av一区二区三区粉嫩| 欧美日韩一区视频| 日本一区二区不卡视频| 奇米四色…亚洲| 91小宝寻花一区二区三区| 欧美一级久久久久久久大片| 综合久久综合久久| 精品一区二区在线视频| 在线观看日产精品| 国产午夜精品一区二区| 日韩精品国产欧美| 91日韩在线专区| 久久青草欧美一区二区三区| 午夜精品久久久久久久蜜桃app| 成人免费高清在线观看| 欧美一区国产二区| 亚洲精品日日夜夜| 丁香六月久久综合狠狠色| 欧美一区二区三区四区高清| 亚洲精品欧美激情| 国产宾馆实践打屁股91| 日韩一区二区三区视频| 亚洲综合色区另类av| 成人一级片网址| 久久色中文字幕| 日本亚洲视频在线| 欧美亚洲一区三区| 中文字幕中文字幕在线一区| 国产一区二区影院| 欧美一级精品大片| 亚洲成人免费视| 91美女视频网站| 国产精品日产欧美久久久久|