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

📄 os_tmr.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    538          #ifdef OS_SAFETY_CRITICAL
    539              if (perr == (INT8U *)0) {
    540                  OS_SAFETY_CRITICAL_EXCEPTION();
    541                  return (OS_FALSE);
    542              }
    543          #endif
    544          
    545          #if OS_ARG_CHK_EN > 0u
    546              if (ptmr == (OS_TMR *)0) {
    547                  *perr = OS_ERR_TMR_INVALID;
    548                  return (OS_FALSE);
    549              }
    550          #endif
    551              if (ptmr->OSTmrType != OS_TMR_TYPE) {                   /* Validate timer structure                               */
   \   00000006   2078               LDRB     R0,[R4, #+0]
   \   00000008   6428               CMP      R0,#+100
   \   0000000A   03D0               BEQ.N    ??OSTmrStart_0
    552                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000000C   8920               MOVS     R0,#+137
   \   0000000E   2870               STRB     R0,[R5, #+0]
    553                  return (OS_FALSE);
   \   00000010   0020               MOVS     R0,#+0
   \   00000012   35E0               B.N      ??OSTmrStart_1
    554              }
    555              if (OSIntNesting > 0u) {                                /* See if trying to call from an ISR                      */
   \                     ??OSTmrStart_0:
   \   00000014   ........           LDR.W    R0,??DataTable18_1
   \   00000018   0078               LDRB     R0,[R0, #+0]
   \   0000001A   0028               CMP      R0,#+0
   \   0000001C   03D0               BEQ.N    ??OSTmrStart_2
    556                  *perr  = OS_ERR_TMR_ISR;
   \   0000001E   8B20               MOVS     R0,#+139
   \   00000020   2870               STRB     R0,[R5, #+0]
    557                  return (OS_FALSE);
   \   00000022   0020               MOVS     R0,#+0
   \   00000024   2CE0               B.N      ??OSTmrStart_1
    558              }
    559              OSSchedLock();
   \                     ??OSTmrStart_2:
   \   00000026   ........           BL       OSSchedLock
    560              switch (ptmr->OSTmrState) {
   \   0000002A   94F82500           LDRB     R0,[R4, #+37]
   \   0000002E   0028               CMP      R0,#+0
   \   00000030   1BD0               BEQ.N    ??OSTmrStart_3
   \   00000032   0228               CMP      R0,#+2
   \   00000034   0FD0               BEQ.N    ??OSTmrStart_4
   \   00000036   0ED3               BCC.N    ??OSTmrStart_4
   \   00000038   0328               CMP      R0,#+3
   \   0000003A   1CD1               BNE.N    ??OSTmrStart_5
    561                  case OS_TMR_STATE_RUNNING:                          /* Restart the timer                                      */
    562                       OSTmr_Unlink(ptmr);                            /* ... Stop the timer                                     */
   \                     ??OSTmrStart_6:
   \   0000003C   2000               MOVS     R0,R4
   \   0000003E   ........           BL       OSTmr_Unlink
    563                       OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
   \   00000042   0021               MOVS     R1,#+0
   \   00000044   2000               MOVS     R0,R4
   \   00000046   ........           BL       OSTmr_Link
    564                       OSSchedUnlock();
   \   0000004A   ........           BL       OSSchedUnlock
    565                       *perr = OS_ERR_NONE;
   \   0000004E   0020               MOVS     R0,#+0
   \   00000050   2870               STRB     R0,[R5, #+0]
    566                       return (OS_TRUE);
   \   00000052   0120               MOVS     R0,#+1
   \   00000054   14E0               B.N      ??OSTmrStart_1
    567          
    568                  case OS_TMR_STATE_STOPPED:                          /* Start the timer                                        */
    569                  case OS_TMR_STATE_COMPLETED:
    570                       OSTmr_Link(ptmr, OS_TMR_LINK_DLY);             /* ... Link timer to timer wheel                          */
   \                     ??OSTmrStart_4:
   \   00000056   0021               MOVS     R1,#+0
   \   00000058   2000               MOVS     R0,R4
   \   0000005A   ........           BL       OSTmr_Link
    571                       OSSchedUnlock();
   \   0000005E   ........           BL       OSSchedUnlock
    572                       *perr = OS_ERR_NONE;
   \   00000062   0020               MOVS     R0,#+0
   \   00000064   2870               STRB     R0,[R5, #+0]
    573                       return (OS_TRUE);
   \   00000066   0120               MOVS     R0,#+1
   \   00000068   0AE0               B.N      ??OSTmrStart_1
    574          
    575                  case OS_TMR_STATE_UNUSED:                           /* Timer not created                                      */
    576                       OSSchedUnlock();
   \                     ??OSTmrStart_3:
   \   0000006A   ........           BL       OSSchedUnlock
    577                       *perr = OS_ERR_TMR_INACTIVE;
   \   0000006E   8720               MOVS     R0,#+135
   \   00000070   2870               STRB     R0,[R5, #+0]
    578                       return (OS_FALSE);
   \   00000072   0020               MOVS     R0,#+0
   \   00000074   04E0               B.N      ??OSTmrStart_1
    579          
    580                  default:
    581                       OSSchedUnlock();
   \                     ??OSTmrStart_5:
   \   00000076   ........           BL       OSSchedUnlock
    582                       *perr = OS_ERR_TMR_INVALID_STATE;
   \   0000007A   8D20               MOVS     R0,#+141
   \   0000007C   2870               STRB     R0,[R5, #+0]
    583                       return (OS_FALSE);
   \   0000007E   0020               MOVS     R0,#+0
   \                     ??OSTmrStart_1:
   \   00000080   32BD               POP      {R1,R4,R5,PC}    ;; return
    584              }
    585          }
    586          #endif
    587          
    588          /*$PAGE*/
    589          /*
    590          ************************************************************************************************************************
    591          *                                                   STOP A TIMER
    592          *
    593          * Description: This function is called by your application code to stop a timer.
    594          *
    595          * Arguments  : ptmr          Is a pointer to the timer to stop.
    596          *
    597          *              opt           Allows you to specify an option to this functions which can be:
    598          *
    599          *                               OS_TMR_OPT_NONE          Do nothing special but stop the timer
    600          *                               OS_TMR_OPT_CALLBACK      Execute the callback function, pass it the callback argument
    601          *                                                        specified when the timer was created.
    602          *                               OS_TMR_OPT_CALLBACK_ARG  Execute the callback function, pass it the callback argument
    603          *                                                        specified in THIS function call
    604          *
    605          *              callback_arg  Is a pointer to a 'new' callback argument that can be passed to the callback function
    606          *                               instead of the timer's callback argument.  In other words, use 'callback_arg' passed in
    607          *                               THIS function INSTEAD of ptmr->OSTmrCallbackArg
    608          *
    609          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
    610          *                               OS_ERR_NONE
    611          *                               OS_ERR_TMR_INVALID         'ptmr' is a NULL pointer
    612          *                               OS_ERR_TMR_INVALID_TYPE    'ptmr'  is not pointing to an OS_TMR
    613          *                               OS_ERR_TMR_ISR             if the function was called from an ISR
    614          *                               OS_ERR_TMR_INACTIVE        if the timer was not created
    615          *                               OS_ERR_TMR_INVALID_OPT     if you specified an invalid option for 'opt'
    616          *                               OS_ERR_TMR_STOPPED         if the timer was already stopped
    617          *                               OS_ERR_TMR_INVALID_STATE   the timer is in an invalid state
    618          *                               OS_ERR_TMR_NO_CALLBACK     if the timer does not have a callback function defined
    619          *
    620          * Returns    : OS_TRUE       If we stopped the timer (if the timer is already stopped, we also return OS_TRUE)
    621          *              OS_FALSE      If not
    622          ************************************************************************************************************************
    623          */
    624          
    625          #if OS_TMR_EN > 0u

   \                                 In section .text, align 2, keep-with-next
    626          BOOLEAN  OSTmrStop (OS_TMR  *ptmr,
    627                              INT8U    opt,
    628                              void    *callback_arg,
    629                              INT8U   *perr)
    630          {
   \                     OSTmrStop:
   \   00000000   2DE9F041           PUSH     {R4-R8,LR}
   \   00000004   0400               MOVS     R4,R0
   \   00000006   0D00               MOVS     R5,R1
   \   00000008   1600               MOVS     R6,R2
   \   0000000A   1F00               MOVS     R7,R3
    631              OS_TMR_CALLBACK  pfnct;
    632          
    633          
    634          #ifdef OS_SAFETY_CRITICAL
    635              if (perr == (INT8U *)0) {
    636                  OS_SAFETY_CRITICAL_EXCEPTION();
    637                  return (OS_FALSE);
    638              }
    639          #endif
    640          
    641          #if OS_ARG_CHK_EN > 0u
    642              if (ptmr == (OS_TMR *)0) {
    643                  *perr = OS_ERR_TMR_INVALID;
    644                  return (OS_FALSE);
    645              }
    646          #endif
    647              if (ptmr->OSTmrType != OS_TMR_TYPE) {                         /* Validate timer structure                         */
   \   0000000C   2078               LDRB     R0,[R4, #+0]
   \   0000000E   6428               CMP      R0,#+100
   \   00000010   03D0               BEQ.N    ??OSTmrStop_0
    648                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   00000012   8920               MOVS     R0,#+137
   \   00000014   3870               STRB     R0,[R7, #+0]
    649                  return (OS_FALSE);
   \   00000016   0020               MOVS     R0,#+0
   \   00000018   51E0               B.N      ??OSTmrStop_1
    650              }
    651              if (OSIntNesting > 0u) {                                      /* See if trying to call from an ISR                */
   \                     ??OSTmrStop_0:
   \   0000001A   ........           LDR.W    R0,??DataTable18_1
   \   0000001E   0078               LDRB     R0,[R0, #+0]
   \   00000020   0028               CMP      R0,#+0
   \   00000022   03D0               BEQ.N    ??OSTmrStop_2
    652                  *perr  = OS_ERR_TMR_ISR;
   \   00000024   8B20               MOVS     R0,#+139
   \   00000026   3870               STRB     R0,[R7, #+0]
    653                  return (OS_FALSE);
   \   00000028   0020               MOVS     R0,#+0
   \   0000002A   48E0               B.N      ??OSTmrStop_1
    654              }
    655              OSSchedLock();
   \                     ??OSTmrStop_2:
   \   0000002C   ........           BL       OSSchedLock
    656              switch (ptmr->OSTmrState) {
   \   00000030   94F82500           LDRB     R0,[R4, #+37]
   \   00000034   0028               CMP      R0,#+0
   \   00000036   37D0               BEQ.N    ??OSTmrStop_3
   \   00000038   0228               CMP      R0,#+2
   \   0000003A   2FD0               BEQ.N    ??OSTmrStop_4
   \   0000003C   2ED3               BCC.N    ??OSTmrStop_4
   \   0000003E   0328               CMP      R0,#+3
   \   00000040   38D1               BNE.N    ??OSTmrStop_5
    657                  case OS_TMR_STATE_RUNNING:
    658                       OSTmr_Unlink(ptmr);                                  /* Remove from current wheel spoke                  */
   \                     ??OSTmrStop_6:
   \   00000042   2000               MOVS     R0,R4
   \   00000044   ........           BL       OSTmr_Unlink
    659                       *perr = OS_ERR_NONE;
   \   00000048   0020               MOVS  

⌨️ 快捷键说明

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