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

📄 os_tmr.txt

📁 ucos2 is a file system for embedded applications which can be used on any media, for which you can p
💻 TXT
📖 第 1 页 / 共 4 页
字号:
000244  ebfffffe          BL       OSTmr_Free
000248  e5950000          LDR      r0,[r5,#0]  ; OSTmrSem
00024c  ebfffffe          BL       OSSemPost
;;;245                 OSTmr_Unlock();
;;;246                 *perr = OS_ERR_NONE;
;;;247                 return (OS_TRUE);
000250  e3a00001          MOV      r0,#1
000254  e5c47000          STRB     r7,[r4,#0]            ;246
                  |L1.600|
000258  e8bd41f0          POP      {r4-r8,lr}
;;;248    
;;;249            case OS_TMR_STATE_UNUSED:                           /* Already deleted                                        */
;;;250                 OSTmr_Unlock();
;;;251                 *perr = OS_ERR_TMR_INACTIVE;
;;;252                 return (OS_FALSE);
;;;253    
;;;254            default:
;;;255                 OSTmr_Unlock();
;;;256                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;257                 return (OS_FALSE);
;;;258        }
;;;259    }
00025c  e12fff1e          BX       lr
                  |L1.608|
000260  e5950000          LDR      r0,[r5,#0]  ; OSTmrSem
000264  ebfffffe          BL       OSSemPost
000268  e3a00087          MOV      r0,#0x87              ;251
                  |L1.620|
00026c  e5c40000          STRB     r0,[r4,#0]            ;256
000270  e3a00000          MOV      r0,#0                 ;257
000274  eafffff7          B        |L1.600|
                  |L1.632|
000278  e5950000          LDR      r0,[r5,#0]            ;257  ; OSTmrSem
00027c  ebfffffe          BL       OSSemPost
000280  e3a0008d          MOV      r0,#0x8d              ;256
000284  eafffff8          B        |L1.620|
;;;260    #endif
                          ENDP

                  OSTmrNameGet PROC
;;;290                         INT8U   *perr)
;;;291    {
000288  e92d41f0          PUSH     {r4-r8,lr}
00028c  e1a05000          MOV      r5,r0
;;;292        INT8U  len;
;;;293    
;;;294    
;;;295    #if OS_ARG_CHK_EN > 0
;;;296        if (perr == (INT8U *)0) {
;;;297            return (0);
;;;298        }
;;;299        if (pdest == (INT8U *)0) {
;;;300            *perr = OS_ERR_TMR_INVALID_DEST;
;;;301            return (0);
;;;302        }
;;;303        if (ptmr == (OS_TMR *)0) {
;;;304            *perr = OS_ERR_TMR_INVALID;
;;;305            return (0);
;;;306        }
;;;307    #endif
;;;308        if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
000290  e5d00000          LDRB     r0,[r0,#0]
000294  e1a07001          MOV      r7,r1                 ;291
000298  e1a04002          MOV      r4,r2                 ;291
00029c  e3500064          CMP      r0,#0x64
;;;309            *perr = OS_ERR_TMR_INVALID_TYPE;
0002a0  13a00089          MOVNE    r0,#0x89
;;;310            return (0);
0002a4  1a00001b          BNE      |L1.792|
;;;311        }
;;;312        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
0002a8  e59f061c          LDR      r0,|L1.2252|
0002ac  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0002b0  e3500000          CMP      r0,#0
;;;313            *perr = OS_ERR_NAME_GET_ISR;
0002b4  13a00011          MOVNE    r0,#0x11
;;;314            return (0);
0002b8  1a000016          BNE      |L1.792|
;;;315        }
;;;316        OSTmr_Lock();
0002bc  ebfffffe          BL       OSTmr_Lock
;;;317        switch (ptmr->OSTmrState) {
0002c0  e5d50031          LDRB     r0,[r5,#0x31]
0002c4  e59f6610          LDR      r6,|L1.2268|
0002c8  e3500000          CMP      r0,#0
0002cc  0a00000e          BEQ      |L1.780|
0002d0  e3500001          CMP      r0,#1
0002d4  13500002          CMPNE    r0,#2
0002d8  13500003          CMPNE    r0,#3
0002dc  1a000010          BNE      |L1.804|
;;;318            case OS_TMR_STATE_RUNNING:
;;;319            case OS_TMR_STATE_STOPPED:
;;;320            case OS_TMR_STATE_COMPLETED:
;;;321                 len   = OS_StrCopy(pdest, ptmr->OSTmrName);
0002e0  e2851020          ADD      r1,r5,#0x20
0002e4  e1a00007          MOV      r0,r7
0002e8  ebfffffe          BL       OS_StrCopy
0002ec  e1a05000          MOV      r5,r0
0002f0  e5960000          LDR      r0,[r6,#0]  ; OSTmrSem
0002f4  ebfffffe          BL       OSSemPost
;;;322                 OSTmr_Unlock();
;;;323                 *perr = OS_ERR_NONE;
0002f8  e3a00000          MOV      r0,#0
0002fc  e5c40000          STRB     r0,[r4,#0]
;;;324                 return (len);
000300  e1a00005          MOV      r0,r5
                  |L1.772|
000304  e8bd41f0          POP      {r4-r8,lr}
;;;325    
;;;326            case OS_TMR_STATE_UNUSED:                      /* Timer is not allocated                                      */
;;;327                 OSTmr_Unlock();
;;;328                 *perr = OS_ERR_TMR_INACTIVE;
;;;329                 return (0);
;;;330    
;;;331            default:
;;;332                 OSTmr_Unlock();
;;;333                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;334                 return (0);
;;;335        }
;;;336    }
000308  e12fff1e          BX       lr
                  |L1.780|
00030c  e5960000          LDR      r0,[r6,#0]  ; OSTmrSem
000310  ebfffffe          BL       OSSemPost
000314  e3a00087          MOV      r0,#0x87              ;328
                  |L1.792|
000318  e5c40000          STRB     r0,[r4,#0]            ;333
00031c  e3a00000          MOV      r0,#0                 ;334
000320  eafffff7          B        |L1.772|
                  |L1.804|
000324  e5960000          LDR      r0,[r6,#0]            ;334  ; OSTmrSem
000328  ebfffffe          BL       OSSemPost
00032c  e3a0008d          MOV      r0,#0x8d              ;333
000330  eafffff8          B        |L1.792|
;;;337    #endif
                          ENDP

                  OSTmrRemainGet PROC
;;;364                            INT8U   *perr)
;;;365    {
000334  e92d41f0          PUSH     {r4-r8,lr}
000338  e1a05000          MOV      r5,r0
;;;366        INT32U  remain;
;;;367    
;;;368    
;;;369    #if OS_ARG_CHK_EN > 0
;;;370        if (perr == (INT8U *)0) {
;;;371            return (0);
;;;372        }
;;;373        if (ptmr == (OS_TMR *)0) {
;;;374            *perr = OS_ERR_TMR_INVALID;
;;;375            return (0);
;;;376        }
;;;377    #endif
;;;378        if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
00033c  e5d00000          LDRB     r0,[r0,#0]
000340  e1a04001          MOV      r4,r1                 ;365
000344  e3500064          CMP      r0,#0x64
;;;379            *perr = OS_ERR_TMR_INVALID_TYPE;
000348  13a00089          MOVNE    r0,#0x89
;;;380            return (0);
00034c  1a000004          BNE      |L1.868|
;;;381        }
;;;382        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
000350  e59f0574          LDR      r0,|L1.2252|
000354  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000358  e3500000          CMP      r0,#0
00035c  0a000002          BEQ      |L1.876|
;;;383            *perr = OS_ERR_TMR_ISR;
000360  e3a0008b          MOV      r0,#0x8b
                  |L1.868|
000364  e5c40000          STRB     r0,[r4,#0]            ;379
000368  ea000023          B        |L1.1020|
                  |L1.876|
;;;384            return (0);
;;;385        }
;;;386        OSTmr_Lock();
00036c  ebfffffe          BL       OSTmr_Lock
;;;387        switch (ptmr->OSTmrState) {
000370  e5d50031          LDRB     r0,[r5,#0x31]
000374  e59f1560          LDR      r1,|L1.2268|
000378  e3500000          CMP      r0,#0
00037c  0a000020          BEQ      |L1.1028|
000380  e3500001          CMP      r0,#1
000384  e3a07000          MOV      r7,#0
000388  0a00000d          BEQ      |L1.964|
00038c  e3500002          CMP      r0,#2
000390  0a000016          BEQ      |L1.1008|
000394  e3500003          CMP      r0,#3
000398  1a00001d          BNE      |L1.1044|
;;;388            case OS_TMR_STATE_RUNNING:
;;;389                 remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
00039c  e59f2540          LDR      r2,|L1.2276|
0003a0  e5950014          LDR      r0,[r5,#0x14]
0003a4  e5922000          LDR      r2,[r2,#0]  ; OSTmrTime
0003a8  e0405002          SUB      r5,r0,r2
0003ac  e5910000          LDR      r0,[r1,#0]  ; OSTmrSem
0003b0  ebfffffe          BL       OSSemPost
;;;390                 OSTmr_Unlock();
;;;391                 *perr  = OS_ERR_NONE;
;;;392                 return (remain);
0003b4  e1a00005          MOV      r0,r5
0003b8  e5c47000          STRB     r7,[r4,#0]            ;391
                  |L1.956|
0003bc  e8bd41f0          POP      {r4-r8,lr}
;;;393    
;;;394            case OS_TMR_STATE_STOPPED:                     /* It's assumed that the timer has not started yet             */
;;;395                 switch (ptmr->OSTmrOpt) {
;;;396                     case OS_TMR_OPT_PERIODIC:
;;;397                          if (ptmr->OSTmrDly == 0) {
;;;398                              remain = ptmr->OSTmrPeriod;
;;;399                          } else {
;;;400                              remain = ptmr->OSTmrDly;
;;;401                          }
;;;402                          OSTmr_Unlock();
;;;403                          *perr  = OS_ERR_NONE;
;;;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);
;;;414    
;;;415            case OS_TMR_STATE_COMPLETED:                   /* Only ONE-SHOT that timed out can be in this state           */
;;;416                 OSTmr_Unlock();
;;;417                 *perr = OS_ERR_NONE;
;;;418                 return (0);
;;;419    
;;;420            case OS_TMR_STATE_UNUSED:
;;;421                 OSTmr_Unlock();
;;;422                 *perr = OS_ERR_TMR_INACTIVE;
;;;423                 return (0);
;;;424    
;;;425            default:
;;;426                 OSTmr_Unlock();
;;;427                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;428                 return (0);
;;;429        }
;;;430    }
0003c0  e12fff1e          BX       lr
                  |L1.964|
0003c4  e5d50030          LDRB     r0,[r5,#0x30]         ;395
0003c8  e5956018          LDR      r6,[r5,#0x18]         ;408
0003cc  e3500002          CMP      r0,#2                 ;395
0003d0  1a000001          BNE      |L1.988|
0003d4  e3560000          CMP      r6,#0                 ;397
0003d8  0595601c          LDREQ    r6,[r5,#0x1c]         ;398
                  |L1.988|
0003dc  e5910000          LDR      r0,[r1,#0]            ;398  ; OSTmrSem
0003e0  ebfffffe          BL       OSSemPost
0003e4  e1a00006          MOV      r0,r6                 ;413
0003e8  e5c47000          STRB     r7,[r4,#0]            ;403
0003ec  eafffff2          B        |L1.956|
                  |L1.1008|
0003f0  e5910000          LDR      r0,[r1,#0]            ;413  ; OSTmrSem
0003f4  ebfffffe          BL       OSSemPost
0003f8  e5c47000          STRB     r7,[r4,#0]            ;417
                  |L1.1020|
0003fc  e3a00000          MOV      r0,#0                 ;428
000400  eaffffed          B        |L1.956|
                  |L1.1028|
000404  e5910000          LDR      r0,[r1,#0]            ;428  ; OSTmrSem
000408  ebfffffe          BL       OSSemPost
00040c  e3a00087          MOV      r0,#0x87              ;422
000410  eaffffd3          B        |L1.868|
                  |L1.1044|
000414  e5910000          LDR      r0,[r1,#0]            ;423  ; OSTmrSem
000418  ebfffffe          BL       OSSemPost
00041c  e3a0008d          MOV      r0,#0x8d              ;427
000420  eaffffcf          B        |L1.868|
;;;431    #endif
                          ENDP

                  OSTmrStateGet PROC
;;;461                          INT8U   *perr)
;;;462    {
000424  e92d4070          PUSH     {r4-r6,lr}
000428  e1a04000          MOV      r4,r0
;;;463        INT8U  state;
;;;464    
;;;465    
;;;466    #if OS_ARG_CHK_EN > 0
;;;467        if (perr == (INT8U *)0) {
;;;468            return (0);
;;;469        }
;;;470        if (ptmr == (OS_TMR *)0) {
;;;471            *perr = OS_ERR_TMR_INVALID;
;;;472            return (0);
;;;473        }
;;;474    #endif
;;;475        if (ptmr->OSTmrType != OS_TMR_TYPE) {              /* Validate timer structure                                    */
00042c  e5d00000          LDRB     r0,[r0,#0]
000430  e1a05001          MOV      r5,r1                 ;462
000434  e3500064          CMP      r0,#0x64
;;;476            *perr = OS_ERR_TMR_INVALID_TYPE;
000438  13a00089          MOVNE    r0,#0x89
;;;477            return (0);
00043c  1a000004          BNE      |L1.1108|
;;;478        }
;;;479        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
000440  e59f0484          LDR      r0,|L1.2252|
000444  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000448  e3500000          CMP      r0,#0
00044c  0a000004          BEQ      |L1.1124|
;;;480            *perr = OS_ERR_TMR_ISR;
000450  e3a0008b          MOV      r0,#0x8b
                  |L1.1108|
000454  e5c50000          STRB     r0,[r5,#0]
;;;481            return (0);
000458  e3a00000          MOV      r0,#0
                  |L1.1116|
00045c  e8bd4070          POP      {r4-r6,lr}

⌨️ 快捷键说明

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