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

📄 os_tmr.lst

📁 stm32+ucos-ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    285          INT8U  OSTmrNameGet (OS_TMR   *ptmr,
    286                               INT8U   **pdest,
    287                               INT8U    *perr)
    288          {
   \                     OSTmrNameGet:
   \   00000000   F8B5               PUSH     {R3-R7,LR}
   \   00000002   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,R1
   \   00000006   1600               MOVS     R6,R2
    289              INT8U  len;
    290          
    291          
    292          #ifdef OS_SAFETY_CRITICAL
    293              if (perr == (INT8U *)0) {
    294                  OS_SAFETY_CRITICAL_EXCEPTION();
    295                  return (0u);
    296              }
    297          #endif
    298          
    299          #if OS_ARG_CHK_EN > 0u
    300              if (pdest == (INT8U **)0) {
    301                  *perr = OS_ERR_TMR_INVALID_DEST;
    302                  return (0u);
    303              }
    304              if (ptmr == (OS_TMR *)0) {
    305                  *perr = OS_ERR_TMR_INVALID;
    306                  return (0u);
    307              }
    308          #endif
    309              if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
   \   00000008   2078               LDRB     R0,[R4, #+0]
   \   0000000A   6428               CMP      R0,#+100
   \   0000000C   03D0               BEQ.N    ??OSTmrNameGet_0
    310                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000000E   8920               MOVS     R0,#+137
   \   00000010   3070               STRB     R0,[R6, #+0]
    311                  return (0u);
   \   00000012   0020               MOVS     R0,#+0
   \   00000014   29E0               B.N      ??OSTmrNameGet_1
    312              }
    313              if (OSIntNesting > 0u) {                           /* See if trying to call from an ISR                           */
   \                     ??OSTmrNameGet_0:
   \   00000016   ........           LDR.W    R0,??DataTable18_1
   \   0000001A   0078               LDRB     R0,[R0, #+0]
   \   0000001C   0028               CMP      R0,#+0
   \   0000001E   03D0               BEQ.N    ??OSTmrNameGet_2
    314                  *perr = OS_ERR_NAME_GET_ISR;
   \   00000020   1120               MOVS     R0,#+17
   \   00000022   3070               STRB     R0,[R6, #+0]
    315                  return (0u);
   \   00000024   0020               MOVS     R0,#+0
   \   00000026   20E0               B.N      ??OSTmrNameGet_1
    316              }
    317              OSSchedLock();
   \                     ??OSTmrNameGet_2:
   \   00000028   ........           BL       OSSchedLock
    318              switch (ptmr->OSTmrState) {
   \   0000002C   94F82500           LDRB     R0,[R4, #+37]
   \   00000030   0028               CMP      R0,#+0
   \   00000032   0FD0               BEQ.N    ??OSTmrNameGet_3
   \   00000034   401E               SUBS     R0,R0,#+1
   \   00000036   0228               CMP      R0,#+2
   \   00000038   12D8               BHI.N    ??OSTmrNameGet_4
    319                  case OS_TMR_STATE_RUNNING:
    320                  case OS_TMR_STATE_STOPPED:
    321                  case OS_TMR_STATE_COMPLETED:
    322                       *pdest = ptmr->OSTmrName;
   \                     ??OSTmrNameGet_5:
   \   0000003A   206A               LDR      R0,[R4, #+32]
   \   0000003C   2860               STR      R0,[R5, #+0]
    323                       len    = OS_StrLen(*pdest);
   \   0000003E   2868               LDR      R0,[R5, #+0]
   \   00000040   ........           BL       OS_StrLen
   \   00000044   0700               MOVS     R7,R0
    324                       OSSchedUnlock();
   \   00000046   ........           BL       OSSchedUnlock
    325                       *perr = OS_ERR_NONE;
   \   0000004A   0020               MOVS     R0,#+0
   \   0000004C   3070               STRB     R0,[R6, #+0]
    326                       return (len);
   \   0000004E   3800               MOVS     R0,R7
   \   00000050   C0B2               UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   00000052   0AE0               B.N      ??OSTmrNameGet_1
    327          
    328                  case OS_TMR_STATE_UNUSED:                      /* Timer is not allocated                                      */
    329                       OSSchedUnlock();
   \                     ??OSTmrNameGet_3:
   \   00000054   ........           BL       OSSchedUnlock
    330                       *perr = OS_ERR_TMR_INACTIVE;
   \   00000058   8720               MOVS     R0,#+135
   \   0000005A   3070               STRB     R0,[R6, #+0]
    331                       return (0u);
   \   0000005C   0020               MOVS     R0,#+0
   \   0000005E   04E0               B.N      ??OSTmrNameGet_1
    332          
    333                  default:
    334                       OSSchedUnlock();
   \                     ??OSTmrNameGet_4:
   \   00000060   ........           BL       OSSchedUnlock
    335                       *perr = OS_ERR_TMR_INVALID_STATE;
   \   00000064   8D20               MOVS     R0,#+141
   \   00000066   3070               STRB     R0,[R6, #+0]
    336                       return (0u);
   \   00000068   0020               MOVS     R0,#+0
   \                     ??OSTmrNameGet_1:
   \   0000006A   F2BD               POP      {R1,R4-R7,PC}    ;; return
    337              }
    338          }
    339          #endif
    340          
    341          /*$PAGE*/
    342          /*
    343          ************************************************************************************************************************
    344          *                                    GET HOW MUCH TIME IS LEFT BEFORE A TIMER EXPIRES
    345          *
    346          * Description: This function is called to get the number of ticks before a timer times out.
    347          *
    348          * Arguments  : ptmr          Is a pointer to the timer to obtain the remaining time from.
    349          *
    350          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
    351          *                               OS_ERR_NONE
    352          *                               OS_ERR_TMR_INVALID        'ptmr' is a NULL pointer
    353          *                               OS_ERR_TMR_INVALID_TYPE   'ptmr'  is not pointing to an OS_TMR
    354          *                               OS_ERR_TMR_ISR            if the call was made from an ISR
    355          *                               OS_ERR_TMR_INACTIVE       'ptmr' points to a timer that is not active
    356          *                               OS_ERR_TMR_INVALID_STATE  the timer is in an invalid state
    357          *
    358          * Returns    : The time remaining for the timer to expire.  The time represents 'timer' increments.  In other words, if
    359          *              OSTmr_Task() is signaled every 1/10 of a second then the returned value represents the number of 1/10 of
    360          *              a second remaining before the timer expires.
    361          ************************************************************************************************************************
    362          */
    363          
    364          #if OS_TMR_EN > 0u

   \                                 In section .text, align 2, keep-with-next
    365          INT32U  OSTmrRemainGet (OS_TMR  *ptmr,
    366                                  INT8U   *perr)
    367          {
   \                     OSTmrRemainGet:
   \   00000000   70B5               PUSH     {R4-R6,LR}
   \   00000002   0400               MOVS     R4,R0
   \   00000004   0D00               MOVS     R5,R1
    368              INT32U  remain;
    369          
    370          
    371          #ifdef OS_SAFETY_CRITICAL
    372              if (perr == (INT8U *)0) {
    373                  OS_SAFETY_CRITICAL_EXCEPTION();
    374                  return (0u);
    375              }
    376          #endif
    377          
    378          #if OS_ARG_CHK_EN > 0u
    379              if (ptmr == (OS_TMR *)0) {
    380                  *perr = OS_ERR_TMR_INVALID;
    381                  return (0u);
    382              }
    383          #endif
    384              if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
   \   00000006   2078               LDRB     R0,[R4, #+0]
   \   00000008   6428               CMP      R0,#+100
   \   0000000A   03D0               BEQ.N    ??OSTmrRemainGet_0
    385                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000000C   8920               MOVS     R0,#+137
   \   0000000E   2870               STRB     R0,[R5, #+0]
    386                  return (0u);
   \   00000010   0020               MOVS     R0,#+0
   \   00000012   49E0               B.N      ??OSTmrRemainGet_1
    387              }
    388              if (OSIntNesting > 0u) {                           /* See if trying to call from an ISR                           */
   \                     ??OSTmrRemainGet_0:
   \   00000014   ........           LDR.W    R0,??DataTable18_1
   \   00000018   0078               LDRB     R0,[R0, #+0]
   \   0000001A   0028               CMP      R0,#+0
   \   0000001C   03D0               BEQ.N    ??OSTmrRemainGet_2
    389                  *perr = OS_ERR_TMR_ISR;
   \   0000001E   8B20               MOVS     R0,#+139
   \   00000020   2870               STRB     R0,[R5, #+0]
    390                  return (0u);
   \   00000022   0020               MOVS     R0,#+0
   \   00000024   40E0               B.N      ??OSTmrRemainGet_1
    391              }
    392              OSSchedLock();
   \                     ??OSTmrRemainGet_2:
   \   00000026   ........           BL       OSSchedLock
    393              switch (ptmr->OSTmrState) {
   \   0000002A   94F82500           LDRB     R0,[R4, #+37]
   \   0000002E   0028               CMP      R0,#+0
   \   00000030   2FD0               BEQ.N    ??OSTmrRemainGet_3
   \   00000032   0228               CMP      R0,#+2
   \   00000034   27D0               BEQ.N    ??OSTmrRemainGet_4
   \   00000036   0DD3               BCC.N    ??OSTmrRemainGet_5
   \   00000038   0328               CMP      R0,#+3
   \   0000003A   30D1               BNE.N    ??OSTmrRemainGet_6
    394                  case OS_TMR_STATE_RUNNING:
    395                       remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
   \                     ??OSTmrRemainGet_7:
   \   0000003C   6069               LDR      R0,[R4, #+20]
   \   0000003E   ........           LDR.W    R1,??DataTable18_2
   \   00000042   0968               LDR      R1,[R1, #+0]
   \   00000044   401A               SUBS     R0,R0,R1
   \   00000046   0600               MOVS     R6,R0
    396                       OSSchedUnlock();
   \   00000048   ........           BL       OSSchedUnlock
    397                       *perr  = OS_ERR_NONE;
   \   0000004C   0020               MOVS     R0,#+0
   \   0000004E   2870               STRB     R0,[R5, #+0]
    398                       return (remain);
   \   00000050   3000               MOVS     R0,R6
   \   00000052   29E0               B.N      ??OSTmrRemainGet_1
    399          
    400                  case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */
    401                       switch (ptmr->OSTmrOpt) {
   \                     ??OSTmrRemainGet_5:
   \   00000054   94F82400           LDRB     R0,[R4, #+36]
   \   00000058   0228               CMP      R0,#+2
   \   0000005A   0CD1               BNE.N    ??OSTmrRemainGet_8
    402                           case OS_TMR_OPT_PERIODIC:
    403                                if (ptmr->OSTmrDly == 0u) {
   \   0000005C   A069               LDR      R0,[R4, #+24]
   \   0000005E   0028               CMP      R0,#+0
   \   00000060   02D1               BNE.N    ??OSTmrRemainGet_9

⌨️ 快捷键说明

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