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

📄 os_tmr.lst

📁 针对STM32F103的UCOS移植
💻 LST
📖 第 1 页 / 共 5 页
字号:
    136                       }
    137                       break;
    138          
    139                  case OS_TMR_OPT_ONE_SHOT:
    140                       if (dly == 0) {
   \                     ??OSTmrCreate_3:
   \   0000002C   4046               MOV      R0,R8
   \   0000002E   0028               CMP      R0,#+0
   \   00000030   05D1               BNE.N    ??OSTmrCreate_5
    141                           *perr = OS_ERR_TMR_INVALID_DLY;
   \   00000032   8220               MOVS     R0,#+130
   \   00000034   2070               STRB     R0,[R4, #+0]
   \   00000036   ECE7               B.N      ??OSTmrCreate_1
    142                           return ((OS_TMR *)0);
    143                       }
    144                       break;
    145          
    146                  default:
    147                       *perr = OS_ERR_TMR_INVALID_OPT;
   \                     ??OSTmrCreate_4:
   \   00000038   8420               MOVS     R0,#+132
   \   0000003A   2070               STRB     R0,[R4, #+0]
   \   0000003C   E9E7               B.N      ??OSTmrCreate_1
    148                       return ((OS_TMR *)0);
    149              }
    150          #endif
    151              if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
   \                     ??OSTmrCreate_5:
   \   0000003E   ....               LDR.N    R0,??DataTable6  ;; OSIntNesting
   \   00000040   0078               LDRB     R0,[R0, #+0]
   \   00000042   0028               CMP      R0,#+0
   \   00000044   02D0               BEQ.N    ??OSTmrCreate_6
    152                  *perr  = OS_ERR_TMR_ISR;
   \   00000046   8B20               MOVS     R0,#+139
   \   00000048   2070               STRB     R0,[R4, #+0]
   \   0000004A   E2E7               B.N      ??OSTmrCreate_1
    153                  return ((OS_TMR *)0);
    154              }
    155              OSTmr_Lock();
   \                     ??OSTmrCreate_6:
   \   0000004C   ........           BL       OSTmr_Lock
    156              ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool                      */
   \   00000050   ........           BL       OSTmr_Alloc
   \   00000054   0500               MOVS     R5,R0
    157              if (ptmr == (OS_TMR *)0) {
   \   00000056   04D1               BNE.N    ??OSTmrCreate_7
    158                  OSTmr_Unlock();
   \   00000058   ........           BL       OSTmr_Unlock
    159                  *perr = OS_ERR_TMR_NON_AVAIL;
   \   0000005C   8620               MOVS     R0,#+134
   \   0000005E   2070               STRB     R0,[R4, #+0]
   \   00000060   D7E7               B.N      ??OSTmrCreate_1
    160                  return ((OS_TMR *)0);
    161              }
    162              ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet                 */
   \                     ??OSTmrCreate_7:
   \   00000062   3030               ADDS     R0,R0,#+48
   \   00000064   0121               MOVS     R1,#+1
   \   00000066   4170               STRB     R1,[R0, #+1]
    163              ptmr->OSTmrDly         = dly;
   \   00000068   2E00               MOVS     R6,R5
   \   0000006A   361D               ADDS     R6,R6,#+4
   \   0000006C   C6F81480           STR      R8,[R6, #+20]
    164              ptmr->OSTmrPeriod      = period;
   \   00000070   C6F81890           STR      R9,[R6, #+24]
    165              ptmr->OSTmrOpt         = opt;
   \   00000074   0770               STRB     R7,[R0, #+0]
    166              ptmr->OSTmrCallback    = callback;
   \   00000076   C6F800A0           STR      R10,[R6, #+0]
    167              ptmr->OSTmrCallbackArg = callback_arg;
   \   0000007A   0898               LDR      R0,[SP, #+32]
   \   0000007C   7060               STR      R0,[R6, #+4]
    168          #if OS_TMR_CFG_NAME_SIZE > 0
    169              if (pname !=(INT8U *)0) {
   \   0000007E   0027               MOVS     R7,#+0
   \   00000080   0998               LDR      R0,[SP, #+36]
   \   00000082   0028               CMP      R0,#+0
   \   00000084   08D0               BEQ.N    ??OSTmrCreate_8
    170                  len = OS_StrLen(pname);                             /* Copy timer name                                        */
   \   00000086   ........           _BLF     OS_StrLen,??OS_StrLen??rT
    171                  if (len < OS_TMR_CFG_NAME_SIZE) {
   \   0000008A   1028               CMP      R0,#+16
   \   0000008C   0AD2               BCS.N    ??OSTmrCreate_9
    172                      (void)OS_StrCopy(ptmr->OSTmrName, pname);
   \   0000008E   0999               LDR      R1,[SP, #+36]
   \   00000090   2800               MOVS     R0,R5
   \   00000092   2030               ADDS     R0,R0,#+32
   \   00000094   ........           _BLF     OS_StrCopy,??OS_StrCopy??rT
    173                  } else {
    174          #if OS_TMR_CFG_NAME_SIZE > 1
    175                      ptmr->OSTmrName[0] = '#';                       /* Invalid size specified                                 */
    176                      ptmr->OSTmrName[1] = OS_ASCII_NUL;
    177          #endif
    178                      *perr              = OS_ERR_TMR_NAME_TOO_LONG;
    179                      OSTmr_Unlock();
    180                      return (ptmr);
    181                  }
    182              }
    183          #endif
    184              OSTmr_Unlock();
   \                     ??OSTmrCreate_8:
   \   00000098   ........           BL       OSTmr_Unlock
    185              *perr = OS_ERR_NONE;
   \   0000009C   2770               STRB     R7,[R4, #+0]
    186              return (ptmr);
   \   0000009E   2800               MOVS     R0,R5
   \                     ??OSTmrCreate_2:
   \   000000A0   BDE8F087           POP      {R4-R10,PC}      ;; return
   \                     ??OSTmrCreate_9:
   \   000000A4   2320               MOVS     R0,#+35
   \   000000A6   3077               STRB     R0,[R6, #+28]
   \   000000A8   7777               STRB     R7,[R6, #+29]
   \   000000AA   8C20               MOVS     R0,#+140
   \   000000AC   2070               STRB     R0,[R4, #+0]
   \   000000AE   ........           BL       OSTmr_Unlock
   \   000000B2   2800               MOVS     R0,R5
   \   000000B4   F4E7               B.N      ??OSTmrCreate_2
    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   30B5               PUSH     {R4,R5,LR}
   \   00000002   0500               MOVS     R5,R0
   \   00000004   0C00               MOVS     R4,R1
    216          #if OS_ARG_CHK_EN > 0
    217              if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
   \   00000006   01D1               BNE.N    ??OSTmrDel_0
    218                  return (OS_FALSE);
   \                     ??OSTmrDel_1:
   \   00000008   0020               MOVS     R0,#+0
   \   0000000A   30BD               POP      {R4,R5,PC}       ;; return
    219              }
    220              if (ptmr == (OS_TMR *)0) {
   \                     ??OSTmrDel_0:
   \   0000000C   002D               CMP      R5,#+0
   \   0000000E   02D1               BNE.N    ??OSTmrDel_2
    221                  *perr = OS_ERR_TMR_INVALID;
   \   00000010   8A20               MOVS     R0,#+138
   \   00000012   2070               STRB     R0,[R4, #+0]
   \   00000014   F8E7               B.N      ??OSTmrDel_1
    222                  return (OS_FALSE);
    223              }
    224          #endif
    225              if (ptmr->OSTmrType != OS_TMR_TYPE) {                   /* Validate timer structure                               */
   \                     ??OSTmrDel_2:
   \   00000016   2878               LDRB     R0,[R5, #+0]
   \   00000018   6428               CMP      R0,#+100
   \   0000001A   02D0               BEQ.N    ??OSTmrDel_3
    226                  *perr = OS_ERR_TMR_INVALID_TYPE;
   \   0000001C   8920               MOVS     R0,#+137
   \   0000001E   2070               STRB     R0,[R4, #+0]
   \   00000020   F2E7               B.N      ??OSTmrDel_1
    227                  return (OS_FALSE);
    228              }
    229              if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
   \                     ??OSTmrDel_3:
   \   00000022   ....               LDR.N    R0,??DataTable6  ;; OSIntNesting
   \   00000024   0078               LDRB     R0,[R0, #+0]
   \   00000026   0028               CMP      R0,#+0
   \   00000028   02D0               BEQ.N    ??OSTmrDel_4
    230                  *perr  = OS_ERR_TMR_ISR;
   \   0000002A   8B20               MOVS     R0,#+139
   \   0000002C   2070               STRB     R0,[R4, #+0]
   \   0000002E   EBE7               B.N      ??OSTmrDel_1
    231                  return (OS_FALSE);
    232              }
    233              OSTmr_Lock();
   \                     ??OSTmrDel_4:
   \   00000030   ........           BL       OSTmr_Lock
    234              switch (ptmr->OSTmrState) {
   \   00000034   95F83100           LDRB     R0,[R5, #+49]
   \   00000038   0028               CMP      R0,#+0
   \   0000003A   10D0               BEQ.N    ??OSTmrDel_5
   \   0000003C   401E               SUBS     R0,R0,#+1
   \   0000003E   0128               CMP      R0,#+1
   \   00000040   04D9               BLS.N    ??OSTmrDel_6
   \   00000042   801E               SUBS     R0,R0,#+2
   \   00000044   10D1               BNE.N    ??OSTmrDel_7
    235                  case OS_TMR_STATE_RUNNING:
    236                       OSTmr_Unlink(ptmr);                            /* Remove from current wheel spoke                        */
   \   00000046   2800               MOVS     R0,R5
   \   00000048   ........           BL       OSTmr_Unlink
    237                       OSTmr_Free(ptmr);                              /* Return timer to free list of timers                    */
    238                       OSTmr_Unlock();
    239                       *perr = OS_ERR_NONE;
    240                       return (OS_TRUE);
    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                    */

⌨️ 快捷键说明

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