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

📄 os_tmr.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
    150          #endif
    151              if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
   \                     ??OSTmrCreate_5:
   \   00000080   ........           LDR      R0,??DataTable7  ;; OSIntNesting
   \   00000084   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000088   010050E3           CMP      R0,#+1
   \   0000008C   0300003A           BCC      ??OSTmrCreate_6
    152                  *perr  = OS_ERR_TMR_ISR;
   \   00000090   8B00A0E3           MOV      R0,#+139
   \   00000094   0000C9E5           STRB     R0,[R9, #+0]
    153                  return ((OS_TMR *)0);
   \   00000098   0000A0E3           MOV      R0,#+0
   \   0000009C   290000EA           B        ??OSTmrCreate_1
    154              }
    155              OSTmr_Lock();
   \                     ??OSTmrCreate_6:
   \   000000A0   ........           BL       OSTmr_Lock
    156              ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool                      */
   \   000000A4   ........           BL       OSTmr_Alloc
   \   000000A8   00A0B0E1           MOVS     R10,R0
    157              if (ptmr == (OS_TMR *)0) {
   \   000000AC   00005AE3           CMP      R10,#+0
   \   000000B0   0400001A           BNE      ??OSTmrCreate_7
    158                  OSTmr_Unlock();
   \   000000B4   ........           BL       OSTmr_Unlock
    159                  *perr = OS_ERR_TMR_NON_AVAIL;
   \   000000B8   8600A0E3           MOV      R0,#+134
   \   000000BC   0000C9E5           STRB     R0,[R9, #+0]
    160                  return ((OS_TMR *)0);
   \   000000C0   0000A0E3           MOV      R0,#+0
   \   000000C4   1F0000EA           B        ??OSTmrCreate_1
    161              }
    162              ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet                 */
   \                     ??OSTmrCreate_7:
   \   000000C8   0100A0E3           MOV      R0,#+1
   \   000000CC   3100CAE5           STRB     R0,[R10, #+49]
    163              ptmr->OSTmrDly         = dly;
   \   000000D0   18408AE5           STR      R4,[R10, #+24]
    164              ptmr->OSTmrPeriod      = period;
   \   000000D4   1C508AE5           STR      R5,[R10, #+28]
    165              ptmr->OSTmrOpt         = opt;
   \   000000D8   3060CAE5           STRB     R6,[R10, #+48]
    166              ptmr->OSTmrCallback    = callback;
   \   000000DC   00009DE5           LDR      R0,[SP, #+0]
   \   000000E0   04008AE5           STR      R0,[R10, #+4]
    167              ptmr->OSTmrCallbackArg = callback_arg;
   \   000000E4   08708AE5           STR      R7,[R10, #+8]
    168          #if OS_TMR_CFG_NAME_SIZE > 0
    169              if (pname !=(INT8U *)0) {
   \   000000E8   000058E3           CMP      R8,#+0
   \   000000EC   1100000A           BEQ      ??OSTmrCreate_8
    170                  len = OS_StrLen(pname);                             /* Copy timer name                                        */
   \   000000F0   0800B0E1           MOVS     R0,R8
   \   000000F4   ........           _BLF     OS_StrLen,??OS_StrLen??rA
   \   000000F8   00B0B0E1           MOVS     R11,R0
    171                  if (len < OS_TMR_CFG_NAME_SIZE) {
   \   000000FC   10005BE3           CMP      R11,#+16
   \   00000100   0300002A           BCS      ??OSTmrCreate_9
    172                      (void)OS_StrCopy(ptmr->OSTmrName, pname);
   \   00000104   0810B0E1           MOVS     R1,R8
   \   00000108   20009AE2           ADDS     R0,R10,#+32
   \   0000010C   ........           _BLF     OS_StrCopy,??OS_StrCopy??rA
   \   00000110   080000EA           B        ??OSTmrCreate_8
    173                  } else {
    174          #if OS_TMR_CFG_NAME_SIZE > 1
    175                      ptmr->OSTmrName[0] = '#';                       /* Invalid size specified                                 */
   \                     ??OSTmrCreate_9:
   \   00000114   2300A0E3           MOV      R0,#+35
   \   00000118   2000CAE5           STRB     R0,[R10, #+32]
    176                      ptmr->OSTmrName[1] = OS_ASCII_NUL;
   \   0000011C   0000A0E3           MOV      R0,#+0
   \   00000120   2100CAE5           STRB     R0,[R10, #+33]
    177          #endif
    178                      *perr              = OS_ERR_TMR_NAME_TOO_LONG;
   \   00000124   8C00A0E3           MOV      R0,#+140
   \   00000128   0000C9E5           STRB     R0,[R9, #+0]
    179                      OSTmr_Unlock();
   \   0000012C   ........           BL       OSTmr_Unlock
    180                      return (ptmr);
   \   00000130   0A00B0E1           MOVS     R0,R10
   \   00000134   030000EA           B        ??OSTmrCreate_1
    181                  }
    182              }
    183          #endif
    184              OSTmr_Unlock();
   \                     ??OSTmrCreate_8:
   \   00000138   ........           BL       OSTmr_Unlock
    185              *perr = OS_ERR_NONE;
   \   0000013C   0000A0E3           MOV      R0,#+0
   \   00000140   0000C9E5           STRB     R0,[R9, #+0]
    186              return (ptmr);
   \   00000144   0A00B0E1           MOVS     R0,R10
   \                     ??OSTmrCreate_1:
   \   00000148   04D08DE2           ADD      SP,SP,#+4        ;; stack cleaning
   \   0000014C   F08FBDE8           POP      {R4-R11,PC}      ;; return
    187          }
    188          #endif
    189          
    190          /*$PAGE*/
    191          /*
    192          ************************************************************************************************************************
    193          *                                                   DELETE A TIMER
    194          *
    195          * Description: This function is called by your application code to delete a timer.
    196          *
    197          * Arguments  : ptmr          Is a pointer to the timer to stop and delete.
    198          *
    199          *              perr          Is a pointer to an error code.  '*perr' will contain one of the following:
    200          *                               OS_ERR_NONE
    201          *                               OS_ERR_TMR_INVALID        'ptmr'  is a NULL pointer
    202          *                               OS_ERR_TMR_INVALID_TYPE   'ptmr'  is not pointing to an OS_TMR
    203          *                               OS_ERR_TMR_ISR            if the function was called from an ISR
    204          *                               OS_ERR_TMR_INACTIVE       if the timer was not created
    205          *                               OS_ERR_TMR_INVALID_STATE  the timer is in an invalid state
    206          *
    207          * Returns    : OS_TRUE       If the call was successful
    208          *              OS_FALSE      If not
    209          ************************************************************************************************************************
    210          */
    211          
    212          #if OS_TMR_EN > 0

   \                                 In segment CODE, align 4, keep-with-next
    213          BOOLEAN  OSTmrDel (OS_TMR  *ptmr,
    214                             INT8U   *perr)
    215          {
   \                     OSTmrDel:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
   \   00000008   0150B0E1           MOVS     R5,R1
    216          #if OS_ARG_CHK_EN > 0
    217              if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
   \   0000000C   000055E3           CMP      R5,#+0
   \   00000010   0100001A           BNE      ??OSTmrDel_1
    218                  return (OS_FALSE);
   \   00000014   0000A0E3           MOV      R0,#+0
   \   00000018   350000EA           B        ??OSTmrDel_2
    219              }
    220              if (ptmr == (OS_TMR *)0) {
   \                     ??OSTmrDel_1:
   \   0000001C   000054E3           CMP      R4,#+0
   \   00000020   0300001A           BNE      ??OSTmrDel_3
    221                  *perr = OS_ERR_TMR_INVALID;
   \   00000024   8A00A0E3           MOV      R0,#+138
   \   00000028   0000C5E5           STRB     R0,[R5, #+0]
    222                  return (OS_FALSE);
   \   0000002C   0000A0E3           MOV      R0,#+0
   \   00000030   2F0000EA           B        ??OSTmrDel_2
    223              }
    224          #endif
    225              if (ptmr->OSTmrType != OS_TMR_TYPE) {                   /* Validate timer structure                               */
   \                     ??OSTmrDel_3:
   \   00000034   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000038   640050E3           CMP      R0,#+100
   \   0000003C   0300000A           BEQ      ??OSTmrDel_4
    226                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   00000040   8900A0E3           MOV      R0,#+137
   \   00000044   0000C5E5           STRB     R0,[R5, #+0]
    227                  return (OS_FALSE);
   \   00000048   0000A0E3           MOV      R0,#+0
   \   0000004C   280000EA           B        ??OSTmrDel_2
    228              }
    229              if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
   \                     ??OSTmrDel_4:
   \   00000050   ........           LDR      R0,??DataTable7  ;; OSIntNesting
   \   00000054   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000058   010050E3           CMP      R0,#+1
   \   0000005C   0300003A           BCC      ??OSTmrDel_5
    230                  *perr  = OS_ERR_TMR_ISR;
   \   00000060   8B00A0E3           MOV      R0,#+139
   \   00000064   0000C5E5           STRB     R0,[R5, #+0]
    231                  return (OS_FALSE);
   \   00000068   0000A0E3           MOV      R0,#+0
   \   0000006C   200000EA           B        ??OSTmrDel_2
    232              }
    233              OSTmr_Lock();
   \                     ??OSTmrDel_5:
   \   00000070   ........           BL       OSTmr_Lock
    234              switch (ptmr->OSTmrState) {
   \   00000074   3100D4E5           LDRB     R0,[R4, #+49]
   \   00000078   030050E3           CMP      R0,#+3
   \   0000007C   1800008A           BHI      ??OSTmrDel_6
   \   00000080   011F8FE2           ADR      R1,??OSTmrDel_0
   \   00000084   0010D1E7           LDRB     R1,[R1, R0]
   \   00000088   01F18FE0           ADD      PC,PC,R1, LSL #+2
   \                     ??OSTmrDel_0:
   \   0000008C   10090900           DC8      +16,+9,+9,+0
    235                  case OS_TMR_STATE_RUNNING:
    236                       OSTmr_Unlink(ptmr);                            /* Remove from current wheel spoke                        */
   \                     ??OSTmrDel_7:
   \   00000090   0400B0E1           MOVS     R0,R4
   \   00000094   ........           BL       OSTmr_Unlink
    237                       OSTmr_Free(ptmr);                              /* Return timer to free list of timers                    */
   \   00000098   0400B0E1           MOVS     R0,R4
   \   0000009C   ........           BL       OSTmr_Free
    238                       OSTmr_Unlock();
   \   000000A0   ........           BL       OSTmr_Unlock
    239                       *perr = OS_ERR_NONE;
   \   000000A4   0000A0E3           MOV      R0,#+0
   \   000000A8   0000C5E5           STRB     R0,[R5, #+0]
    240                       return (OS_TRUE);
   \   000000AC   0100A0E3           MOV      R0,#+1
   \   000000B0   0F0000EA           B        ??OSTmrDel_2
    241          
    242                  case OS_TMR_STATE_STOPPED:                          /* Timer has not started or ...                           */
    243                  case OS_TMR_STATE_COMPLETED:                        /* ... timer has completed the ONE-SHOT time              */
    244                       OSTmr_Free(ptmr);                              /* Return timer to free list of timers                    */
   \                     ??OSTmrDel_8:
   \   000000B4   0400B0E1           MOVS     R0,R4
   \   000000B8   ........           BL       OSTmr_Free
    245                       OSTmr_Unlock();
   \   000000BC   ........           BL       OSTmr_Unlock
    246                       *perr = OS_ERR_NONE;
   \   000000C0   0000A0E3           MOV      R0,#+0
   \   000000C4   0000C5E5           STRB     R0,[R5, #+0]
    247                       return (OS_TRUE);
   \   000000C8   0100A0E3           MOV      R0,#+1
   \   000000CC   080000EA           B        ??OSTmrDel_2
    248          
    249                  case OS_TMR_STATE_UNUSED:                           /* Already deleted                                        */
    250                       OSTmr_Unlock();
   \                     ??OSTmrDel_9:

⌨️ 快捷键说明

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