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

📄 os_tmr.lst

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    359          ************************************************************************************************************************
    360          */
    361          
    362          #if OS_TMR_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    363          INT32U  OSTmrRemainGet (OS_TMR  *ptmr,
    364                                  INT8U   *perr)
    365          {
   \                     OSTmrRemainGet:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0050B0E1           MOVS     R5,R0
   \   00000008   0140B0E1           MOVS     R4,R1
    366              INT32U  remain;
    367          
    368          
    369          #if OS_ARG_CHK_EN > 0
    370              if (perr == (INT8U *)0) {
   \   0000000C   000054E3           CMP      R4,#+0
   \   00000010   0100001A           BNE      ??OSTmrRemainGet_1
    371                  return (0);
   \   00000014   0000A0E3           MOV      R0,#+0
   \   00000018   460000EA           B        ??OSTmrRemainGet_2
    372              }
    373              if (ptmr == (OS_TMR *)0) {
   \                     ??OSTmrRemainGet_1:
   \   0000001C   000055E3           CMP      R5,#+0
   \   00000020   0300001A           BNE      ??OSTmrRemainGet_3
    374                  *perr = OS_ERR_TMR_INVALID;
   \   00000024   8A00A0E3           MOV      R0,#+138
   \   00000028   0000C4E5           STRB     R0,[R4, #+0]
    375                  return (0);
   \   0000002C   0000A0E3           MOV      R0,#+0
   \   00000030   400000EA           B        ??OSTmrRemainGet_2
    376              }
    377          #endif
    378              if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
   \                     ??OSTmrRemainGet_3:
   \   00000034   0000D5E5           LDRB     R0,[R5, #+0]
   \   00000038   640050E3           CMP      R0,#+100
   \   0000003C   0300000A           BEQ      ??OSTmrRemainGet_4
    379                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   00000040   8900A0E3           MOV      R0,#+137
   \   00000044   0000C4E5           STRB     R0,[R4, #+0]
    380                  return (0);
   \   00000048   0000A0E3           MOV      R0,#+0
   \   0000004C   390000EA           B        ??OSTmrRemainGet_2
    381              }
    382              if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
   \                     ??OSTmrRemainGet_4:
   \   00000050   ........           LDR      R0,??DataTable7  ;; OSIntNesting
   \   00000054   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000058   010050E3           CMP      R0,#+1
   \   0000005C   0300003A           BCC      ??OSTmrRemainGet_5
    383                  *perr = OS_ERR_TMR_ISR;
   \   00000060   8B00A0E3           MOV      R0,#+139
   \   00000064   0000C4E5           STRB     R0,[R4, #+0]
    384                  return (0);
   \   00000068   0000A0E3           MOV      R0,#+0
   \   0000006C   310000EA           B        ??OSTmrRemainGet_2
    385              }
    386              OSTmr_Lock();
   \                     ??OSTmrRemainGet_5:
   \   00000070   ........           BL       OSTmr_Lock
    387              switch (ptmr->OSTmrState) {
   \   00000074   3100D5E5           LDRB     R0,[R5, #+49]
   \   00000078   030050E3           CMP      R0,#+3
   \   0000007C   2900008A           BHI      ??OSTmrRemainGet_6
   \   00000080   011F8FE2           ADR      R1,??OSTmrRemainGet_0
   \   00000084   0010D1E7           LDRB     R1,[R1, R0]
   \   00000088   01F18FE0           ADD      PC,PC,R1, LSL #+2
   \                     ??OSTmrRemainGet_0:
   \   0000008C   21091C00           DC8      +33,+9,+28,+0
    388                  case OS_TMR_STATE_RUNNING:
    389                       remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
   \                     ??OSTmrRemainGet_7:
   \   00000090   140095E5           LDR      R0,[R5, #+20]
   \   00000094   ........           LDR      R1,??DataTable43  ;; OSTmrTime
   \   00000098   001091E5           LDR      R1,[R1, #+0]
   \   0000009C   015050E0           SUBS     R5,R0,R1
    390                       OSTmr_Unlock();
   \   000000A0   ........           BL       OSTmr_Unlock
    391                       *perr  = OS_ERR_NONE;
   \   000000A4   0000A0E3           MOV      R0,#+0
   \   000000A8   0000C4E5           STRB     R0,[R4, #+0]
    392                       return (remain);
   \   000000AC   0500B0E1           MOVS     R0,R5
   \   000000B0   200000EA           B        ??OSTmrRemainGet_2
    393          
    394                  case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */
    395                       switch (ptmr->OSTmrOpt) {
   \                     ??OSTmrRemainGet_8:
   \   000000B4   3000D5E5           LDRB     R0,[R5, #+48]
   \   000000B8   020050E3           CMP      R0,#+2
   \   000000BC   0900001A           BNE      ??OSTmrRemainGet_9
    396                           case OS_TMR_OPT_PERIODIC:
    397                                if (ptmr->OSTmrDly == 0) {
   \                     ??OSTmrRemainGet_10:
   \   000000C0   180095E5           LDR      R0,[R5, #+24]
   \   000000C4   000050E3           CMP      R0,#+0
   \   000000C8   0100001A           BNE      ??OSTmrRemainGet_11
    398                                    remain = ptmr->OSTmrPeriod;
   \   000000CC   1C5095E5           LDR      R5,[R5, #+28]
   \   000000D0   000000EA           B        ??OSTmrRemainGet_12
    399                                } else {
    400                                    remain = ptmr->OSTmrDly;
   \                     ??OSTmrRemainGet_11:
   \   000000D4   185095E5           LDR      R5,[R5, #+24]
    401                                }
    402                                OSTmr_Unlock();
   \                     ??OSTmrRemainGet_12:
   \   000000D8   ........           BL       OSTmr_Unlock
    403                                *perr  = OS_ERR_NONE;
   \   000000DC   0000A0E3           MOV      R0,#+0
   \   000000E0   0000C4E5           STRB     R0,[R4, #+0]
   \   000000E4   030000EA           B        ??OSTmrRemainGet_13
    404                                break;
    405          
    406                           case OS_TMR_OPT_ONE_SHOT:
    407                           default:
    408                                remain = ptmr->OSTmrDly;
   \                     ??OSTmrRemainGet_9:
   \   000000E8   185095E5           LDR      R5,[R5, #+24]
    409                                OSTmr_Unlock();
   \   000000EC   ........           BL       OSTmr_Unlock
    410                                *perr  = OS_ERR_NONE;
   \   000000F0   0000A0E3           MOV      R0,#+0
   \   000000F4   0000C4E5           STRB     R0,[R4, #+0]
    411                                break;
    412                       }
    413                       return (remain);
   \                     ??OSTmrRemainGet_13:
   \   000000F8   0500B0E1           MOVS     R0,R5
   \   000000FC   0D0000EA           B        ??OSTmrRemainGet_2
    414          
    415                  case OS_TMR_STATE_COMPLETED:                   /* Only ONE-SHOT that timed out can be in this state           */
    416                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_14:
   \   00000100   ........           BL       OSTmr_Unlock
    417                       *perr  = OS_ERR_NONE;
   \   00000104   0000A0E3           MOV      R0,#+0
   \   00000108   0000C4E5           STRB     R0,[R4, #+0]
    418                       return (0);
   \   0000010C   0000A0E3           MOV      R0,#+0
   \   00000110   080000EA           B        ??OSTmrRemainGet_2
    419          
    420                  case OS_TMR_STATE_UNUSED:
    421                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_15:
   \   00000114   ........           BL       OSTmr_Unlock
    422                       *perr  = OS_ERR_TMR_INACTIVE;
   \   00000118   8700A0E3           MOV      R0,#+135
   \   0000011C   0000C4E5           STRB     R0,[R4, #+0]
    423                       return (0);
   \   00000120   0000A0E3           MOV      R0,#+0
   \   00000124   030000EA           B        ??OSTmrRemainGet_2
    424          
    425                  default:
    426                       OSTmr_Unlock();
   \                     ??OSTmrRemainGet_6:
   \   00000128   ........           BL       OSTmr_Unlock
    427                       *perr  = OS_ERR_TMR_INVALID_STATE;
   \   0000012C   8D00A0E3           MOV      R0,#+141
   \   00000130   0000C4E5           STRB     R0,[R4, #+0]
    428                       return (0);
   \   00000134   0000A0E3           MOV      R0,#+0
   \                     ??OSTmrRemainGet_2:
   \   00000138   3080BDE8           POP      {R4,R5,PC}       ;; return
    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   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0050B0E1           MOVS     R5,R0
   \   00000008   0140B0E1           MOVS     R4,R1
    463              INT8U  state;
    464          
    465          
    466          #if OS_ARG_CHK_EN > 0
    467              if (perr == (INT8U *)0) {
   \   0000000C   000054E3           CMP      R4,#+0
   \   00000010   0100001A           BNE      ??OSTmrStateGet_1
    468                  return (0);
   \   00000014   0000A0E3           MOV      R0,#+0
   \   00000018   240000EA           B        ??OSTmrStateGet_2
    469              }
    470              if (ptmr == (OS_TMR *)0) {

⌨️ 快捷键说明

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