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

📄 os_tmr.lst

📁 UCOSII2.85针对8051单片机的移植版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
              
                  OSTmr_InitTask();
              }
              #endif
 872          
 873          /*$PAGE*/
 874          /*
 875          **********************************************************************************************************
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 17  

             -**************
 876          *                                          INITIALIZE THE TIMER MANAGEMENT TASK
 877          *
 878          * Description: This function is called by OSTmrInit() to create the timer management task.
 879          *
 880          * Arguments  : none
 881          *
 882          * Returns    : none
 883          **********************************************************************************************************
             -**************
 884          */
 885          
 886          #if OS_TMR_EN > 0
              static  void  OSTmr_InitTask (void) reentrant
              {
              #if OS_TASK_NAME_SIZE > 6
                  INT8U  err;
              #endif
              
              
              #if OS_TASK_CREATE_EXT_EN > 0
                  #if OS_STK_GROWTH == 1
                  (void)OSTaskCreateExt(OSTmr_Task,
                                        (void *)0,                                       /* No arguments passed to OSTmr
             -Task()      */
                                        &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],         /* Set Top-Of-Stack            
             -            */
                                        OS_TASK_TMR_PRIO,
                                        OS_TASK_TMR_ID,
                                        &OSTmrTaskStk[0],                                /* Set Bottom-Of-Stack         
             -            */
                                        OS_TASK_TMR_STK_SIZE,
                                        (void *)0,                                       /* No TCB extension            
             -            */
                                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);      /* Enable stack checking + clea
             -r stack     */
                  #else
                  (void)OSTaskCreateExt(OSTmr_Task,
                                        (void *)0,                                       /* No arguments passed to OSTmr
             -Task()      */
                                        &OSTmrTaskStk[0],                                /* Set Top-Of-Stack            
             -            */
                                        OS_TASK_TMR_PRIO,
                                        OS_TASK_TMR_ID,
                                        &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],         /* Set Bottom-Of-Stack         
             -            */
                                        OS_TASK_TMR_STK_SIZE,
                                        (void *)0,                                       /* No TCB extension            
             -            */
                                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);      /* Enable stack checking + clea
             -r stack     */
                  #endif
              #else
                  #if OS_STK_GROWTH == 1
                  (void)OSTaskCreate(OSTmr_Task,
                                     (void *)0,
                                     &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],
                                     OS_TASK_TMR_PRIO);
                  #else
                  (void)OSTaskCreate(OSTmr_Task,
                                     (void *)0,
                                     &OSTmrTaskStk[0],
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 18  

                                     OS_TASK_TMR_PRIO);
                  #endif
              #endif
              
              #if OS_TASK_NAME_SIZE > 12
                  OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"uC/OS-II Tmr", &err);
              #else
              #if OS_TASK_NAME_SIZE > 6
                  OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"OS-Tmr", &err);
              #endif
              #endif
              }
              #endif
 939          
 940          /*$PAGE*/
 941          /*
 942          **********************************************************************************************************
             -**************
 943          *                                         INSERT A TIMER INTO THE TIMER WHEEL
 944          *
 945          * Description: This function is called to insert the timer into the timer wheel.  The timer is always inse
             -rted at the
 946          *              beginning of the list.
 947          *
 948          * Arguments  : ptmr          Is a pointer to the timer to insert.
 949          *
 950          *              type          Is either:
 951          *                               OS_TMR_LINK_PERIODIC    Means to re-insert the timer after a period expire
             -d
 952          *                               OS_TMR_LINK_DLY         Means to insert    the timer the first time
 953          *
 954          * Returns    : none
 955          **********************************************************************************************************
             -**************
 956          */
 957          
 958          #if OS_TMR_EN > 0
              static  void  OSTmr_Link (OS_TMR *ptmr, INT8U type) reentrant
              {
                  OS_TMR       *ptmr1;
                  OS_TMR_WHEEL *pspoke;
                  INT16U        spoke;
              
              
                  ptmr->OSTmrState = OS_TMR_STATE_RUNNING;
                  if (type == OS_TMR_LINK_PERIODIC) {                            /* Determine when timer will expire    
             -            */
                      ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
                  } else {
                      if (ptmr->OSTmrDly == 0) {
                          ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
                      } else {
                          ptmr->OSTmrMatch = ptmr->OSTmrDly    + OSTmrTime;
                      }
                  }
                  spoke  = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
                  pspoke = &OSTmrWheelTbl[spoke];
              
                  if (pspoke->OSTmrFirst == (OS_TMR *)0) {                       /* Link into timer wheel               
             -            */
                      pspoke->OSTmrFirst   = ptmr;
                      ptmr->OSTmrNext      = (OS_TMR *)0;
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 19  

                      pspoke->OSTmrEntries = 1;
                  } else {
                      ptmr1                = pspoke->OSTmrFirst;                 /* Point to first timer in the spoke   
             -            */
                      pspoke->OSTmrFirst   = ptmr;
                      ptmr->OSTmrNext      = (void *)ptmr1;
                      ptmr1->OSTmrPrev     = (void *)ptmr;
                      pspoke->OSTmrEntries++;
                  }
                  ptmr->OSTmrPrev = (void *)0;                                   /* Timer always inserted as first node 
             -in list     */
              }
              #endif
 993          
 994          /*$PAGE*/
 995          /*
 996          **********************************************************************************************************
             -**************
 997          *                                         REMOVE A TIMER FROM THE TIMER WHEEL
 998          *
 999          * Description: This function is called to remove the timer from the timer wheel.
1000          *
1001          * Arguments  : ptmr          Is a pointer to the timer to remove.
1002          *
1003          * Returns    : none
1004          **********************************************************************************************************
             -**************
1005          */
1006          
1007          #if OS_TMR_EN > 0
              static  void  OSTmr_Unlink (OS_TMR *ptmr) reentrant
              {
                  OS_TMR        *ptmr1;
                  OS_TMR        *ptmr2;
                  OS_TMR_WHEEL  *pspoke;
                  INT16U         spoke;
              
              
                  spoke  = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
                  pspoke = &OSTmrWheelTbl[spoke];
              
                  if (pspoke->OSTmrFirst == ptmr) {                       /* See if timer to remove is at the beginning 
             -of list     */
                      ptmr1              = (OS_TMR *)ptmr->OSTmrNext;
                      pspoke->OSTmrFirst = (void *)ptmr1;
                      if (ptmr1 != (OS_TMR *)0) {
                          ptmr1->OSTmrPrev = (void *)0;
                      }
                  } else {
                      ptmr1            = (OS_TMR *)ptmr->OSTmrPrev;       /* Remove timer from somewhere in the list    
             -            */
                      ptmr2            = (OS_TMR *)ptmr->OSTmrNext;
                      ptmr1->OSTmrNext = ptmr2;
                      if (ptmr2 != (OS_TMR *)0) {
                          ptmr2->OSTmrPrev = (void *)ptmr1;
                      }
                  }
                  ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
                  ptmr->OSTmrNext  = (void *)0;
                  ptmr->OSTmrPrev  = (void *)0;
                  pspoke->OSTmrEntries--;
              }
C51 COMPILER V7.50   OS_TMR                                                                12/14/2007 08:25:46 PAGE 20  

              #endif
1039          
1040          /*$PAGE*/
1041          /*
1042          **********************************************************************************************************
             -**************
1043          *                                       TIMER MANAGER DATA STRUCTURE LOCKING MECHANISM
1044          *
1045          * Description: These functions are used to gain exclusive access to timer management data structures.
1046          *
1047          * Arguments  : none
1048          *
1049          * Returns    : none
1050          **********************************************************************************************************
             -**************
1051          */
1052          
1053          #if OS_TMR_EN > 0
              static  void  OSTmr_Lock (void) reentrant
              {
                  INT8U  err;
              
              
                  OSSemPend(OSTmrSem, 0, &err);
                  (void)err;
              }
              #endif
1063          
1064          
1065          
1066          #if OS_TMR_EN > 0
              static  void  OSTmr_Unlock (void) reentrant
              {
                  (void)OSSemPost(OSTmrSem);
              }
              #endif
1072          
1073          /*$PAGE*/
1074          /*
1075          **********************************************************************************************************
             -**************
1076          *                                                 TIMER MANAGEMENT TASK
1077          *
1078          * Description: This task is created by OSTmrInit().
1079          *
1080          * Arguments  : none
1081          *
1082          * Returns    : none
1083          **********************************************************************

⌨️ 快捷键说明

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