⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_tmr.lst

📁 UCOSII2.85针对8051单片机的移植版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 436          *                                    FIND OUT WHAT STATE A TIMER IS IN
 437          *
 438          * Description: This function is called to determine what state the timer is in:
 439          *
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 9   

 440          *                  OS_TMR_STATE_UNUSED     the timer has not been created
 441          *                  OS_TMR_STATE_STOPPED    the timer has been created but has not been started or has been
             - stopped
 442          *                  OS_TMR_COMPLETED        the timer is in ONE-SHOT mode and has completed it's timeout
 443          *                  OS_TMR_RUNNING          the timer is currently running
 444          *
 445          * Arguments  : ptmr          Is a pointer to the desired timer
 446          *
 447          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
 448          *                               OS_ERR_NONE
 449          *                               OS_ERR_TMR_INVALID        'ptmr' is a NULL pointer
 450          *                               OS_ERR_TMR_INVALID_TYPE   'ptmr'  is not pointing to an OS_TMR
 451          *                               OS_ERR_TMR_ISR            if the call was made from an ISR
 452          *                               OS_ERR_TMR_INACTIVE       'ptmr' points to a timer that is not active
 453          *                               OS_ERR_TMR_INVALID_STATE  if the timer is not in a valid state
 454          *
 455          * Returns    : The current state of the timer (see description).
 456          **********************************************************************************************************
             -**************
 457          */
 458          
 459          #if OS_TMR_EN > 0
              INT8U  OSTmrStateGet (OS_TMR  *ptmr,
                                    INT8U   *perr) reentrant
              {
                  INT8U  state;
              
              
              #if OS_ARG_CHK_EN > 0
                  if (perr == (INT8U *)0) {
                      return (0);
                  }
                  if (ptmr == (OS_TMR *)0) {
                      *perr = OS_ERR_TMR_INVALID;
                      return (0);
                  }
              #endif
                  if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                        
             -            */
                      *perr = OS_ERR_TMR_INVALID_TYPE;
                      return (0);
                  }
                  if (OSIntNesting > 0) {                            /* See if trying to call from an ISR               
             -            */
                      *perr = OS_ERR_TMR_ISR;
                      return (0);
                  }
                  OSTmr_Lock();
                  state = ptmr->OSTmrState;
                  switch (state) {
                      case OS_TMR_STATE_UNUSED:   
                      case OS_TMR_STATE_STOPPED:  
                      case OS_TMR_STATE_COMPLETED:
                      case OS_TMR_STATE_RUNNING:  
                           *perr = OS_ERR_NONE;
                           break;
                           
                      default:
                           *perr = OS_ERR_TMR_INVALID_STATE;
                           break;
                  }
                  OSTmr_Unlock();
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 10  

                  return (state);
              }
              #endif
 501          
 502          /*$PAGE*/
 503          /*
 504          **********************************************************************************************************
             -**************
 505          *                                                   START A TIMER
 506          *
 507          * Description: This function is called by your application code to start a timer.
 508          *
 509          * Arguments  : ptmr          Is a pointer to an OS_TMR
 510          *
 511          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
 512          *                               OS_ERR_NONE
 513          *                               OS_ERR_TMR_INVALID
 514          *                               OS_ERR_TMR_INVALID_TYPE    'ptmr'  is not pointing to an OS_TMR
 515          *                               OS_ERR_TMR_ISR             if the call was made from an ISR
 516          *                               OS_ERR_TMR_INACTIVE        if the timer was not created
 517          *                               OS_ERR_TMR_INVALID_STATE   the timer is in an invalid state
 518          *
 519          * Returns    : OS_TRUE    if the timer was started
 520          *              OS_FALSE   if an error was detected
 521          **********************************************************************************************************
             -**************
 522          */
 523          
 524          #if OS_TMR_EN > 0
              BOOLEAN  OSTmrStart (OS_TMR   *ptmr,
                                   INT8U    *perr) reentrant
              {
              #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:                          /* Restart the timer                          
             -            */
                           OSTmr_Unlink(ptmr);                            /* ... Stop the timer                         
             -            */
                           OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel              
             -            */
                           OSTmr_Unlock();
                           *perr = OS_ERR_NONE;
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 11  

                           return (OS_TRUE);
              
                      case OS_TMR_STATE_STOPPED:                          /* Start the timer                            
             -            */
                      case OS_TMR_STATE_COMPLETED:
                           OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel              
             -            */
                           OSTmr_Unlock();
                           *perr = OS_ERR_NONE;
                           return (OS_TRUE);
              
                      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
 573          
 574          /*$PAGE*/
 575          /*
 576          **********************************************************************************************************
             -**************
 577          *                                                   STOP A TIMER
 578          *
 579          * Description: This function is called by your application code to stop a timer.
 580          *
 581          * Arguments  : ptmr          Is a pointer to the timer to stop.
 582          *
 583          *              opt           Allows you to specify an option to this functions which can be:
 584          *
 585          *                               OS_TMR_OPT_NONE          Do nothing special but stop the timer
 586          *                               OS_TMR_OPT_CALLBACK      Execute the callback function, pass it the callba
             -ck argument
 587          *                                                        specified when the timer was created.
 588          *                               OS_TMR_OPT_CALLBACK_ARG  Execute the callback function, pass it the callba
             -ck argument
 589          *                                                        specified in THIS function call
 590          *
 591          *              callback_arg  Is a pointer to a 'new' callback argument that can be passed to the callback 
             -function
 592          *                               instead of the timer's callback argument.  In other words, use 'callback_a
             -rg' passed in
 593          *                               THIS function INSTEAD of ptmr->OSTmrCallbackArg
 594          *
 595          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
 596          *                               OS_ERR_NONE
 597          *                               OS_ERR_TMR_INVALID         'ptmr' is a NULL pointer
 598          *                               OS_ERR_TMR_INVALID_TYPE    'ptmr'  is not pointing to an OS_TMR
 599          *                               OS_ERR_TMR_ISR             if the function was called from an ISR
 600          *                               OS_ERR_TMR_INACTIVE        if the timer was not created
 601          *                               OS_ERR_TMR_INVALID_OPT     if you specified an invalid option for 'opt'
 602          *                               OS_ERR_TMR_STOPPED         if the timer was already stopped
 603          *                               OS_ERR_TMR_INVALID_STATE   the timer is in an invalid state
 604          *                               OS_ERR_TMR_NO_CALLBACK     if the timer does not have a callback function 
             -defined
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 12  

 605          *
 606          * Returns    : OS_TRUE       If we stopped the timer (if the timer is already stopped, we also return OS_T
             -RUE)
 607          *              OS_FALSE      If not
 608          **********************************************************************************************************
             -**************
 609          */
 610          
 611          #if OS_TMR_EN > 0
              BOOLEAN  OSTmrStop (OS_TMR  *ptmr,
                                  INT8U    opt,
                                  void    *callback_arg,
                                  INT8U   *perr) reentrant
              {
                  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 availabl
             -e ...       */
                                                        /* simon delete for pass compiling */
                                                        #if 0
                                    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;
                                    }
                                    #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -