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

📄 os_tmr.lst

📁 针对STM32F103的UCOS移植
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                     ??OSTmrRemainGet_2:
   \   00000008   0020               MOVS     R0,#+0
   \   0000000A   70BD               POP      {R4-R6,PC}       ;; return
    372              }
    373              if (ptmr == (OS_TMR *)0) {
   \                     ??OSTmrRemainGet_1:
   \   0000000C   002E               CMP      R6,#+0
   \   0000000E   02D1               BNE.N    ??OSTmrRemainGet_3
    374                  *perr = OS_ERR_TMR_INVALID;
   \   00000010   8A20               MOVS     R0,#+138
   \   00000012   2070               STRB     R0,[R4, #+0]
   \   00000014   F8E7               B.N      ??OSTmrRemainGet_2
    375                  return (0);
    376              }
    377          #endif
    378              if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
   \                     ??OSTmrRemainGet_3:
   \   00000016   3078               LDRB     R0,[R6, #+0]
   \   00000018   6428               CMP      R0,#+100
   \   0000001A   02D0               BEQ.N    ??OSTmrRemainGet_4
    379                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000001C   8920               MOVS     R0,#+137
   \   0000001E   2070               STRB     R0,[R4, #+0]
   \   00000020   F2E7               B.N      ??OSTmrRemainGet_2
    380                  return (0);
    381              }
    382              if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
   \                     ??OSTmrRemainGet_4:
   \   00000022   ....               LDR.N    R0,??DataTable6  ;; OSIntNesting
   \   00000024   0078               LDRB     R0,[R0, #+0]
   \   00000026   0028               CMP      R0,#+0
   \   00000028   02D0               BEQ.N    ??OSTmrRemainGet_5
    383                  *perr = OS_ERR_TMR_ISR;
   \   0000002A   8B20               MOVS     R0,#+139
   \   0000002C   2070               STRB     R0,[R4, #+0]
   \   0000002E   EBE7               B.N      ??OSTmrRemainGet_2
    384                  return (0);
    385              }
    386              OSTmr_Lock();
   \                     ??OSTmrRemainGet_5:
   \   00000030   ........           BL       OSTmr_Lock
    387              switch (ptmr->OSTmrState) {
   \   00000034   3000               MOVS     R0,R6
   \   00000036   3030               ADDS     R0,R0,#+48
   \   00000038   0025               MOVS     R5,#+0
   \   0000003A   4178               LDRB     R1,[R0, #+1]
   \   0000003C   0329               CMP      R1,#+3
   \   0000003E   21D8               BHI.N    ??OSTmrRemainGet_6
   \   00000040   DFE801F0           TBB      [PC, R1]
   \                     ??OSTmrRemainGet_0:
   \   00000044   1B071702           DC8      +27,+7,+23,+2
    388                  case OS_TMR_STATE_RUNNING:
    389                       remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
   \                     ??OSTmrRemainGet_7:
   \   00000048   7069               LDR      R0,[R6, #+20]
   \   0000004A   ....               LDR.N    R1,??DataTable16  ;; OSTmrTime
   \   0000004C   0968               LDR      R1,[R1, #+0]
   \   0000004E   461A               SUBS     R6,R0,R1
   \   00000050   08E0               B.N      ??OSTmrRemainGet_8
    390                       OSTmr_Unlock();
    391                       *perr  = OS_ERR_NONE;
    392                       return (remain);
    393          
    394                  case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */
    395                       switch (ptmr->OSTmrOpt) {
   \                     ??OSTmrRemainGet_9:
   \   00000052   0078               LDRB     R0,[R0, #+0]
   \   00000054   0228               CMP      R0,#+2
   \   00000056   0AD1               BNE.N    ??OSTmrRemainGet_10
    396                           case OS_TMR_OPT_PERIODIC:
    397                                if (ptmr->OSTmrDly == 0) {
   \   00000058   B069               LDR      R0,[R6, #+24]
   \   0000005A   0028               CMP      R0,#+0
   \   0000005C   01D1               BNE.N    ??OSTmrRemainGet_11
    398                                    remain = ptmr->OSTmrPeriod;
   \   0000005E   F669               LDR      R6,[R6, #+28]
   \   00000060   00E0               B.N      ??OSTmrRemainGet_8
    399                                } else {
    400                                    remain = ptmr->OSTmrDly;
   \                     ??OSTmrRemainGet_11:
   \   00000062   0646               MOV      R6,R0
    401                                }
    402                                OSTmr_Unlock();
   \                     ??OSTmrRemainGet_8:
   \   00000064   ........           BL       OSTmr_Unlock
    403                                *perr  = OS_ERR_NONE;
   \   00000068   2570               STRB     R5,[R4, #+0]
    404                                break;
    405          
    406                           case OS_TMR_OPT_ONE_SHOT:
    407                           default:
    408                                remain = ptmr->OSTmrDly;
    409                                OSTmr_Unlock();
    410                                *perr  = OS_ERR_NONE;
    411                                break;
    412                       }
    413                       return (remain);
   \   0000006A   3000               MOVS     R0,R6
   \   0000006C   70BD               POP      {R4-R6,PC}
   \                     ??OSTmrRemainGet_10:
   \   0000006E   B669               LDR      R6,[R6, #+24]
   \   00000070   F8E7               B.N      ??OSTmrRemainGet_8
    414          
    415                  case OS_TMR_STATE_COMPLETED:                   /* Only ONE-SHOT that timed out can be in this state           */
    416                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_12:
   \   00000072   ........           BL       OSTmr_Unlock
    417                       *perr = OS_ERR_NONE;
   \   00000076   2570               STRB     R5,[R4, #+0]
   \   00000078   C6E7               B.N      ??OSTmrRemainGet_2
    418                       return (0);
    419          
    420                  case OS_TMR_STATE_UNUSED:
    421                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_13:
   \   0000007A   ........           BL       OSTmr_Unlock
    422                       *perr = OS_ERR_TMR_INACTIVE;
   \   0000007E   8720               MOVS     R0,#+135
   \   00000080   2070               STRB     R0,[R4, #+0]
   \   00000082   C1E7               B.N      ??OSTmrRemainGet_2
    423                       return (0);
    424          
    425                  default:
    426                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_6:
   \   00000084   ........           BL       OSTmr_Unlock
    427                       *perr = OS_ERR_TMR_INVALID_STATE;
   \   00000088   8D20               MOVS     R0,#+141
   \   0000008A   2070               STRB     R0,[R4, #+0]
   \   0000008C   BCE7               B.N      ??OSTmrRemainGet_2
    428                       return (0);
    429              }
    430          }
    431          #endif
    432          
    433          /*$PAGE*/
    434          /*
    435          ************************************************************************************************************************
    436          *                                    FIND OUT WHAT STATE A TIMER IS IN
    437          *
    438          * Description: This function is called to determine what state the timer is in:
    439          *
    440          *                  OS_TMR_STATE_UNUSED     the timer has not been created
    441          *                  OS_TMR_STATE_STOPPED    the timer has been created but has not been started or has been stopped
    442          *                  OS_TMR_COMPLETED        the timer is in ONE-SHOT mode and has completed it's timeout
    443          *                  OS_TMR_RUNNING          the timer is currently running
    444          *
    445          * Arguments  : ptmr          Is a pointer to the desired timer
    446          *
    447          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
    448          *                               OS_ERR_NONE
    449          *                               OS_ERR_TMR_INVALID        'ptmr' is a NULL pointer
    450          *                               OS_ERR_TMR_INVALID_TYPE   'ptmr'  is not pointing to an OS_TMR
    451          *                               OS_ERR_TMR_ISR            if the call was made from an ISR
    452          *                               OS_ERR_TMR_INACTIVE       'ptmr' points to a timer that is not active
    453          *                               OS_ERR_TMR_INVALID_STATE  if the timer is not in a valid state
    454          *
    455          * Returns    : The current state of the timer (see description).
    456          ************************************************************************************************************************
    457          */
    458          
    459          #if OS_TMR_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    460          INT8U  OSTmrStateGet (OS_TMR  *ptmr,
    461                                INT8U   *perr)
    462          {
   \                     OSTmrStateGet:
   \   00000000   30B5               PUSH     {R4,R5,LR}
   \   00000002   0500               MOVS     R5,R0
   \   00000004   0C00               MOVS     R4,R1
    463              INT8U  state;
    464          
    465          
    466          #if OS_ARG_CHK_EN > 0
    467              if (perr == (INT8U *)0) {
   \   00000006   01D1               BNE.N    ??OSTmrStateGet_0
    468                  return (0);
   \                     ??OSTmrStateGet_1:
   \   00000008   0020               MOVS     R0,#+0
   \   0000000A   30BD               POP      {R4,R5,PC}
    469              }
    470              if (ptmr == (OS_TMR *)0) {
   \                     ??OSTmrStateGet_0:
   \   0000000C   002D               CMP      R5,#+0
   \   0000000E   02D1               BNE.N    ??OSTmrStateGet_2
    471                  *perr = OS_ERR_TMR_INVALID;
   \   00000010   8A20               MOVS     R0,#+138
   \   00000012   2070               STRB     R0,[R4, #+0]
   \   00000014   F8E7               B.N      ??OSTmrStateGet_1
    472                  return (0);
    473              }
    474          #endif
    475              if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
   \                     ??OSTmrStateGet_2:
   \   00000016   2878               LDRB     R0,[R5, #+0]
   \   00000018   6428               CMP      R0,#+100
   \   0000001A   02D0               BEQ.N    ??OSTmrStateGet_3
    476                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000001C   8920               MOVS     R0,#+137
   \   0000001E   2070               STRB     R0,[R4, #+0]
   \   00000020   F2E7               B.N      ??OSTmrStateGet_1
    477                  return (0);
    478              }
    479              if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
   \                     ??OSTmrStateGet_3:
   \   00000022   ....               LDR.N    R0,??DataTable6  ;; OSIntNesting
   \   00000024   0078               LDRB     R0,[R0, #+0]
   \   00000026   0028               CMP      R0,#+0
   \   00000028   02D0               BEQ.N    ??OSTmrStateGet_4
    480                  *perr = OS_ERR_TMR_ISR;
   \   0000002A   8B20               MOVS     R0,#+139
   \   0000002C   2070               STRB     R0,[R4, #+0]
   \   0000002E   EBE7               B.N      ??OSTmrStateGet_1
    481                  return (0);
    482              }
    483              OSTmr_Lock();
   \                     ??OSTmrStateGet_4:

⌨️ 快捷键说明

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