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

📄 os_tmr.lst

📁 编译环境是 iar EWARM ,STM32 下的UCOSII
💻 LST
📖 第 1 页 / 共 5 页
字号:
    811              OS_TMR  *ptmr2;
    812          
    813          
    814              OS_MemClr((INT8U *)&OSTmrTbl[0],      sizeof(OSTmrTbl));            /* Clear all the TMRs                         */
    815              OS_MemClr((INT8U *)&OSTmrWheelTbl[0], sizeof(OSTmrWheelTbl));       /* Clear the timer wheel                      */
    816          
    817              ptmr1 = &OSTmrTbl[0];
    818              ptmr2 = &OSTmrTbl[1];
    819              for (i = 0; i < (OS_TMR_CFG_MAX - 1); i++) {                        /* Init. list of free TMRs                    */
    820                  ptmr1->OSTmrType    = OS_TMR_TYPE;
    821                  ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                      /* Indicate that timer is inactive            */
    822                  ptmr1->OSTmrNext    = (void *)ptmr2;                            /* Link to next timer                         */
    823          #if OS_TMR_CFG_NAME_SIZE > 1
    824                  ptmr1->OSTmrName[0] = '?';                                      /* Unknown name                               */
    825                  ptmr1->OSTmrName[1] = OS_ASCII_NUL;
    826          #endif
    827                  ptmr1++;
    828                  ptmr2++;
    829              }
    830              ptmr1->OSTmrType    = OS_TMR_TYPE;
    831              ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                          /* Indicate that timer is inactive            */
    832              ptmr1->OSTmrNext    = (void *)0;                                    /* Last OS_TMR                                */
    833          #if OS_TMR_CFG_NAME_SIZE > 1
    834              ptmr1->OSTmrName[0] = '?';                                          /* Unknown name                               */
    835              ptmr1->OSTmrName[1] = OS_ASCII_NUL;
    836          #endif
    837              OSTmrTime           = 0;
    838              OSTmrUsed           = 0;
    839              OSTmrFree           = OS_TMR_CFG_MAX;
    840              OSTmrFreeList       = &OSTmrTbl[0];
    841              OSTmrSem            = OSSemCreate(1);
    842              OSTmrSemSignal      = OSSemCreate(0);
    843          
    844          #if OS_EVENT_NAME_SIZE > 18
    845              OSEventNameSet(OSTmrSem,       (INT8U *)"uC/OS-II TmrLock",   &err);/* Assign names to semaphores                 */
    846          #else
    847          #if OS_EVENT_NAME_SIZE > 10
    848              OSEventNameSet(OSTmrSem,       (INT8U *)"OS-TmrLock",         &err);
    849          #endif
    850          #endif
    851          
    852          #if OS_EVENT_NAME_SIZE > 18
    853              OSEventNameSet(OSTmrSemSignal, (INT8U *)"uC/OS-II TmrSignal", &err);
    854          #else
    855          #if OS_EVENT_NAME_SIZE > 10
    856              OSEventNameSet(OSTmrSemSignal, (INT8U *)"OS-TmrSig",          &err);
    857          #endif
    858          #endif
    859          
    860              OSTmr_InitTask();
    861          }
    862          #endif
    863          
    864          /*$PAGE*/
    865          /*
    866          ************************************************************************************************************************
    867          *                                          INITIALIZE THE TIMER MANAGEMENT TASK
    868          *
    869          * Description: This function is called by OSTmrInit() to create the timer management task.
    870          *
    871          * Arguments  : none
    872          *
    873          * Returns    : none
    874          ************************************************************************************************************************
    875          */
    876          
    877          #if OS_TMR_EN > 0
    878          static  void  OSTmr_InitTask (void)
    879          {
    880          #if OS_TASK_NAME_SIZE > 6
    881              INT8U  err;
    882          #endif
    883          
    884          
    885          #if OS_TASK_CREATE_EXT_EN > 0
    886              #if OS_STK_GROWTH == 1
    887              (void)OSTaskCreateExt(OSTmr_Task,
    888                                    (void *)0,                                       /* No arguments passed to OSTmrTask()      */
    889                                    &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],         /* Set Top-Of-Stack                        */
    890                                    OS_TASK_TMR_PRIO,
    891                                    OS_TASK_TMR_ID,
    892                                    &OSTmrTaskStk[0],                                /* Set Bottom-Of-Stack                     */
    893                                    OS_TASK_TMR_STK_SIZE,
    894                                    (void *)0,                                       /* No TCB extension                        */
    895                                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);      /* Enable stack checking + clear stack     */
    896              #else
    897              (void)OSTaskCreateExt(OSTmr_Task,
    898                                    (void *)0,                                       /* No arguments passed to OSTmrTask()      */
    899                                    &OSTmrTaskStk[0],                                /* Set Top-Of-Stack                        */
    900                                    OS_TASK_TMR_PRIO,
    901                                    OS_TASK_TMR_ID,
    902                                    &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],         /* Set Bottom-Of-Stack                     */
    903                                    OS_TASK_TMR_STK_SIZE,
    904                                    (void *)0,                                       /* No TCB extension                        */
    905                                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);      /* Enable stack checking + clear stack     */
    906              #endif
    907          #else
    908              #if OS_STK_GROWTH == 1
    909              (void)OSTaskCreate(OSTmr_Task,
    910                                 (void *)0,
    911                                 &OSTmrTaskStk[OS_TASK_TMR_STK_SIZE - 1],
    912                                 OS_TASK_TMR_PRIO);
    913              #else
    914              (void)OSTaskCreate(OSTmr_Task,
    915                                 (void *)0,
    916                                 &OSTmrTaskStk[0],
    917                                 OS_TASK_TMR_PRIO);
    918              #endif
    919          #endif
    920          
    921          #if OS_TASK_NAME_SIZE > 12
    922              OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"uC/OS-II Tmr", &err);
    923          #else
    924          #if OS_TASK_NAME_SIZE > 6
    925              OSTaskNameSet(OS_TASK_TMR_PRIO, (INT8U *)"OS-Tmr", &err);
    926          #endif
    927          #endif
    928          }
    929          #endif
    930          
    931          /*$PAGE*/
    932          /*
    933          ************************************************************************************************************************
    934          *                                         INSERT A TIMER INTO THE TIMER WHEEL
    935          *
    936          * Description: This function is called to insert the timer into the timer wheel.  The timer is always inserted at the
    937          *              beginning of the list.
    938          *
    939          * Arguments  : ptmr          Is a pointer to the timer to insert.
    940          *
    941          *              type          Is either:
    942          *                               OS_TMR_LINK_PERIODIC    Means to re-insert the timer after a period expired
    943          *                               OS_TMR_LINK_DLY         Means to insert    the timer the first time
    944          *
    945          * Returns    : none
    946          ************************************************************************************************************************
    947          */
    948          
    949          #if OS_TMR_EN > 0
    950          static  void  OSTmr_Link (OS_TMR *ptmr, INT8U type)
    951          {
    952              OS_TMR       *ptmr1;
    953              OS_TMR_WHEEL *pspoke;
    954              INT16U        spoke;
    955          
    956          
    957              ptmr->OSTmrState = OS_TMR_STATE_RUNNING;
    958              if (type == OS_TMR_LINK_PERIODIC) {                            /* Determine when timer will expire                */
    959                  ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
    960              } else {
    961                  if (ptmr->OSTmrDly == 0) {
    962                      ptmr->OSTmrMatch = ptmr->OSTmrPeriod + OSTmrTime;
    963                  } else {
    964                      ptmr->OSTmrMatch = ptmr->OSTmrDly    + OSTmrTime;
    965                  }
    966              }
    967              spoke  = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
    968              pspoke = &OSTmrWheelTbl[spoke];
    969          
    970              if (pspoke->OSTmrFirst == (OS_TMR *)0) {                       /* Link into timer wheel                           */
    971                  pspoke->OSTmrFirst   = ptmr;
    972                  ptmr->OSTmrNext      = (OS_TMR *)0;
    973                  pspoke->OSTmrEntries = 1;
    974              } else {
    975                  ptmr1                = pspoke->OSTmrFirst;                 /* Point to first timer in the spoke               */
    976                  pspoke->OSTmrFirst   = ptmr;
    977                  ptmr->OSTmrNext      = (void *)ptmr1;
    978                  ptmr1->OSTmrPrev     = (void *)ptmr;
    979                  pspoke->OSTmrEntries++;
    980              }
    981              ptmr->OSTmrPrev = (void *)0;                                   /* Timer always inserted as first node in list     */
    982          }
    983          #endif
    984          
    985          /*$PAGE*/
    986          /*
    987          ************************************************************************************************************************
    988          *                                         REMOVE A TIMER FROM THE TIMER WHEEL
    989          *
    990          * Description: This function is called to remove the timer from the timer wheel.
    991          *
    992          * Arguments  : ptmr          Is a pointer to the timer to remove.
    993          *
    994          * Returns    : none
    995          ************************************************************************************************************************
    996          */
    997          
    998          #if OS_TMR_EN > 0
    999          static  void  OSTmr_Unlink (OS_TMR *ptmr)
   1000          {
   1001              OS_TMR        *ptmr1;
   1002              OS_TMR        *ptmr2;
   1003              OS_TMR_WHEEL  *pspoke;
   1004              INT16U         spoke;
   1005          
   1006          
   1007              spoke  = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
   1008              pspoke = &OSTmrWheelTbl[spoke];
   1009          
   1010              if (pspoke->OSTmrFirst == ptmr) {                       /* See if timer to remove is at the beginning of list     */
   1011                  ptmr1              = (OS_TMR *)ptmr->OSTmrNext;
   1012                  pspoke->OSTmrFirst = (OS_TMR *)ptmr1;
   1013                  if (ptmr1 != (OS_TMR *)0) {
   1014                      ptmr1->OSTmrPrev = (void *)0;
   1015                  }
   1016              } else {
   1017                  ptmr1            = (OS_TMR *)ptmr->OSTmrPrev;       /* Remove timer from somewhere in the list                */
   1018                  ptmr2            = (OS_TMR *)ptmr->OSTmrNext;
   1019                  ptmr1->OSTmrNext = ptmr2;
   1020                  if (ptmr2 != (OS_TMR *)0) {
   1021                      ptmr2->OSTmrPrev = (void *)ptmr1;
   1022                  }
   1023              }
   1024              ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
   1025              ptmr->OSTmrNext  = (void *)0;
   1026              pt

⌨️ 快捷键说明

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