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

📄 os_tmr.lst

📁 uCos-ii 2.86 在C8051F410单片机上移植成功!!! 其中包括:UART驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
                  OSTmr_InitTask();
              }
              #endif
 870          
 871          /*$PAGE*/
 872          /*
 873          **********************************************************************************************************
             -**************
C51 COMPILER V8.17   OS_TMR                                                                03/26/2009 14:24:25 PAGE 17  

 874          *                                          INITIALIZE THE TIMER MANAGEMENT TASK
 875          *
 876          * Description: This function is called by OSTmrInit() to create the timer management task.
 877          *
 878          * Arguments  : none
 879          *
 880          * Returns    : none
 881          **********************************************************************************************************
             -**************
 882          */
 883          
 884          #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],
                                     OS_TASK_TMR_PRIO);                       
C51 COMPILER V8.17   OS_TMR                                                                03/26/2009 14:24:25 PAGE 18  

              
                  #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
 938          
 939          /*$PAGE*/
 940          /*
 941          **********************************************************************************************************
             -**************
 942          *                                         INSERT A TIMER INTO THE TIMER WHEEL
 943          *
 944          * Description: This function is called to insert the timer into the timer wheel.  The timer is always inse
             -rted at the
 945          *              beginning of the list.
 946          *
 947          * Arguments  : ptmr          Is a pointer to the timer to insert.
 948          *
 949          *              type          Is either:
 950          *                               OS_TMR_LINK_PERIODIC    Means to re-insert the timer after a period expire
             -d
 951          *                               OS_TMR_LINK_DLY         Means to insert    the timer the first time
 952          *
 953          * Returns    : none
 954          **********************************************************************************************************
             -**************
 955          */
 956          
 957          #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 V8.17   OS_TMR                                                                03/26/2009 14:24:25 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
 992          
 993          /*$PAGE*/
 994          /*
 995          **********************************************************************************************************
             -**************
 996          *                                         REMOVE A TIMER FROM THE TIMER WHEEL
 997          *
 998          * Description: This function is called to remove the timer from the timer wheel.
 999          *
1000          * Arguments  : ptmr          Is a pointer to the timer to remove.
1001          *
1002          * Returns    : none
1003          **********************************************************************************************************
             -**************
1004          */
1005          
1006          #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 = (OS_TMR *)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 V8.17   OS_TMR                                                                03/26/2009 14:24:25 PAGE 20  

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

⌨️ 快捷键说明

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