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

📄 os_tmr.lst

📁 UCOSII2.85针对8051单片机的移植版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE OS_TMR
OBJECT MODULE PLACED IN os_tmr.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE os_tmr.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          **********************************************************************************************************
             -**************
   3          *                                                      uC/OS-III
   4          *                                                 The Real-Time Kernel
   5          *
   6          *                                     (c) Copyright 2005-2007, Micrium, Weston, FL
   7          *                                                  All Rights Reserved
   8          *
   9          *                                                   TIMER MANAGEMENT
  10          *
  11          * File    : OS_TMR.C
  12          * By      : Jean J. Labrosse
  13          * Version : V2.85
  14          *
  15          * LICENSING TERMS:
  16          * ---------------
  17          *   uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research.
             -  
  18          * If you plan on using  uC/OS-II  in a commercial product you need to contact Micri祄 to properly license 
  19          * its use in your product. We provide ALL the source code for your convenience and to help you experience 
  20          * uC/OS-II.   The fact that the  source is provided does  NOT  mean that you can use it without  paying a 
  21          * licensing fee.
  22          **********************************************************************************************************
             -**************
  23          */
  24          
  25          #include <ucos_ii.h>
  26          
  27          /*
  28          **********************************************************************************************************
             -**************
  29          *                                                        NOTES
  30          *
  31          * 1) Your application MUST define the following #define constants:
  32          *
  33          *    OS_TASK_TMR_PRIO          The priority of the Timer management task
  34          *    OS_TASK_TMR_STK_SIZE      The size     of the Timer management task's stack
  35          *
  36          * 2) You must call OSTmrSignal() to notify the Timer management task that it's time to update the timers.
  37          **********************************************************************************************************
             -**************
  38          */
  39          
  40          /*
  41          **********************************************************************************************************
             -**************
  42          *                                                     CONSTANTS
  43          **********************************************************************************************************
             -**************
  44          */
  45          
  46          #define  OS_TMR_LINK_DLY       0
  47          #define  OS_TMR_LINK_PERIODIC  1
  48          
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 2   

  49          /*
  50          **********************************************************************************************************
             -**************
  51          *                                                  LOCAL PROTOTYPES
  52          **********************************************************************************************************
             -**************
  53          */
  54          
  55          #if OS_TMR_EN > 0
              static  OS_TMR  *OSTmr_Alloc         (void) reentrant;
              static  void     OSTmr_Free          (OS_TMR *ptmr) reentrant;
              static  void     OSTmr_InitTask      (void) reentrant;
              static  void     OSTmr_Link          (OS_TMR *ptmr, INT8U type) reentrant;
              static  void     OSTmr_Unlink        (OS_TMR *ptmr) reentrant;
              static  void     OSTmr_Lock          (void) reentrant;
              static  void     OSTmr_Unlock        (void) reentrant;
              static  void     OSTmr_Task          (void   *p_arg) reentrant;
              #endif
  65          
  66          /*$PAGE*/
  67          /*
  68          **********************************************************************************************************
             -**************
  69          *                                                   CREATE A TIMER
  70          *
  71          * Description: This function is called by your application code to create a timer.
  72          *
  73          * Arguments  : dly           Initial delay.
  74          *                            If the timer is configured for ONE-SHOT mode, this is the timeout used
  75          *                            If the timer is configured for PERIODIC mode, this is the first timeout to wa
             -it for
  76          *                               before the timer starts entering periodic mode
  77          *
  78          *              period        The 'period' being repeated for the timer.
  79          *                               If you specified 'OS_TMR_OPT_PERIODIC' as an option, when the timer expire
             -s, it will
  80          *                               automatically restart with the same period.
  81          *
  82          *              opt           Specifies either:
  83          *                               OS_TMR_OPT_ONE_SHOT       The timer counts down only once
  84          *                               OS_TMR_OPT_PERIODIC       The timer counts down and then reloads itself
  85          *
  86          *              callback      Is a pointer to a callback function that will be called when the timer expire
             -s.  The
  87          *                               callback function must be declared as follows:
  88          *
  89          *                               void MyCallback (OS_TMR *ptmr, void *p_arg);
  90          *
  91          *              callback_arg  Is an argument (a pointer) that is passed to the callback function when it is
             - called.
  92          *
  93          *              pname         Is a pointer to an ASCII string that is used to name the timer.  Names are us
             -eful for
  94          *                               debugging.  The length of the ASCII string for the name can be as big as:
  95          *
  96          *                               OS_TMR_CFG_NAME_SIZE and should be found in OS_CFG.H
  97          *
  98          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
  99          *                               OS_ERR_NONE
 100          *                               OS_ERR_TMR_INVALID_DLY     you specified an invalid delay
 101          *                               OS_ERR_TMR_INVALID_PERIOD  you specified an invalid period
 102          *                               OS_ERR_TMR_INVALID_OPT     you specified an invalid option
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 3   

 103          *                               OS_ERR_TMR_ISR             if the call was made from an ISR
 104          *                               OS_ERR_TMR_NON_AVAIL       if there are no free timers from the timer pool
 105          *                               OS_ERR_TMR_NAME_TOO_LONG   if the timer name is too long to fit
 106          *
 107          * Returns    : A pointer to an OS_TMR data structure.  
 108          *              This is the 'handle' that your application will use to reference the timer created.
 109          **********************************************************************************************************
             -**************
 110          */
 111          
 112          #if OS_TMR_EN > 0
              OS_TMR  *OSTmrCreate (INT32U           dly,
                                    INT32U           period,
                                    INT8U            opt,
                                    OS_TMR_CALLBACK  callback,
                                    void            *callback_arg,
                                    INT8U           *pname,
                                    INT8U           *perr) reentrant
              {
                  OS_TMR   *ptmr;
              #if OS_TMR_CFG_NAME_SIZE > 0
                  INT8U     len;
              #endif
              
              
              #if OS_ARG_CHK_EN > 0
                  if (perr == (INT8U *)0) {                               /* Validate arguments                         
             -            */
                      return ((OS_TMR *)0);
                  }
                  switch (opt) {
                      case OS_TMR_OPT_PERIODIC:
                           if (period == 0) {
                               *perr = OS_ERR_TMR_INVALID_PERIOD;
                               return ((OS_TMR *)0);
                           }
                           break;
              
                      case OS_TMR_OPT_ONE_SHOT:
                           if (dly == 0) {
                               *perr = OS_ERR_TMR_INVALID_DLY;
                               return ((OS_TMR *)0);
                           }
                           break;
              
                      default:
                           *perr = OS_ERR_TMR_INVALID_OPT;
                           return ((OS_TMR *)0);
                  }
              #endif
                  if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR          
             -            */
                      *perr  = OS_ERR_TMR_ISR;
                      return ((OS_TMR *)0);
                  }
                  OSTmr_Lock();
                  ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool          
             -            */
                  if (ptmr == (OS_TMR *)0) {
                      OSTmr_Unlock();
                      *perr = OS_ERR_TMR_NON_AVAIL;
                      return ((OS_TMR *)0);
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 4   

                  }
                  ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet     
             -            */
                  ptmr->OSTmrDly         = dly;
                  ptmr->OSTmrPeriod      = period;
                  ptmr->OSTmrOpt         = opt;
                  ptmr->OSTmrCallback    = callback;
                  ptmr->OSTmrCallbackArg = callback_arg;
              #if OS_TMR_CFG_NAME_SIZE > 0
                  if (pname !=(INT8U *)0) {
                      len = OS_StrLen(pname);                             /* Copy timer name                            
             -            */
                      if (len < OS_TMR_CFG_NAME_SIZE) {
                          (void)OS_StrCopy(ptmr->OSTmrName, pname);
                      } else {
              #if OS_TMR_CFG_NAME_SIZE > 1
                          ptmr->OSTmrName[0] = '#';                       /* Invalid size specified                     
             -            */
                          ptmr->OSTmrName[1] = OS_ASCII_NUL;
              #endif
                          *perr              = OS_ERR_TMR_NAME_TOO_LONG;
                          OSTmr_Unlock();
                          return (ptmr);
                      }
                  }
              #endif
                  OSTmr_Unlock();
                  *perr = OS_ERR_NONE;
                  return (ptmr);
              }
              #endif
 189          
 190          /*$PAGE*/
 191          /*
 192          **********************************************************************************************************
             -**************
 193          *                                                   DELETE A TIMER
 194          *
 195          * Description: This function is called by your application code to delete a timer.
 196          *
 197          * Arguments  : ptmr          Is a pointer to the timer to stop and delete.
 198          *
 199          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
 200          *                               OS_ERR_NONE
 201          *                               OS_ERR_TMR_INVALID        'ptmr'  is a NULL pointer
 202          *                               OS_ERR_TMR_INVALID_TYPE   'ptmr'  is not pointing to an OS_TMR
 203          *                               OS_ERR_TMR_ISR            if the function was called from an ISR
 204          *                               OS_ERR_TMR_INACTIVE       if the timer was not created
 205          *                               OS_ERR_TMR_INVALID_STATE  the timer is in an invalid state
 206          *
 207          * Returns    : OS_TRUE       If the call was successful
 208          *              OS_FALSE      If not
 209          **********************************************************************************************************
             -**************
 210          */
 211          
 212          #if OS_TMR_EN > 0
              BOOLEAN  OSTmrDel (OS_TMR  *ptmr,
                                 INT8U   *perr) reentrant
              {

⌨️ 快捷键说明

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