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

📄 os_tmr.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;790        OSTmrFree++;
000260  e59f1b0c          LDR      r1,|L1.3444|
000264  e1d110b0          LDRH     r1,[r1,#0]  ; OSTmrFree
000268  e2811001          ADD      r1,r1,#1
00026c  e3c11801          BIC      r1,r1,#0x10000
000270  e59f2afc          LDR      r2,|L1.3444|
000274  e1c210b0          STRH     r1,[r2,#0]  ; OSTmrFree
;;;791    }
000278  e12fff1e          BX       lr
                          ENDP

                  OSTmr_Unlink PROC
;;;1004   static  void  OSTmr_Unlink (OS_TMR *ptmr)
;;;1005   {
00027c  e52de004          PUSH     {lr}
;;;1006       OS_TMR        *ptmr1;
;;;1007       OS_TMR        *ptmr2;
;;;1008       OS_TMR_WHEEL  *pspoke;
;;;1009       INT16U         spoke;
;;;1010   
;;;1011   
;;;1012       spoke  = ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE;
000280  e590e014          LDR      lr,[r0,#0x14]
000284  e20ec007          AND      r12,lr,#7
;;;1013       pspoke = &OSTmrWheelTbl[spoke];
000288  e59feaec          LDR      lr,|L1.3452|
00028c  e08e318c          ADD      r3,lr,r12,LSL #3
;;;1014   
;;;1015       if (pspoke->OSTmrFirst == ptmr) {                       /* See if timer to remove is at the beginning of list     */
000290  e593e000          LDR      lr,[r3,#0]
000294  e15e0000          CMP      lr,r0
000298  1a000006          BNE      |L1.696|
;;;1016           ptmr1              = (OS_TMR *)ptmr->OSTmrNext;
00029c  e590100c          LDR      r1,[r0,#0xc]
;;;1017           pspoke->OSTmrFirst = (void *)ptmr1;
0002a0  e5831000          STR      r1,[r3,#0]
;;;1018           if (ptmr1 != (OS_TMR *)0) {
0002a4  e3510000          CMP      r1,#0
0002a8  0a000008          BEQ      |L1.720|
;;;1019               ptmr1->OSTmrPrev = (void *)0;
0002ac  e3a0e000          MOV      lr,#0
0002b0  e581e010          STR      lr,[r1,#0x10]
0002b4  ea000005          B        |L1.720|
                  |L1.696|
;;;1020           }
;;;1021       } else {
;;;1022           ptmr1            = (OS_TMR *)ptmr->OSTmrPrev;       /* Remove timer from somewhere in the list                */
0002b8  e5901010          LDR      r1,[r0,#0x10]
;;;1023           ptmr2            = (OS_TMR *)ptmr->OSTmrNext;
0002bc  e590200c          LDR      r2,[r0,#0xc]
;;;1024           ptmr1->OSTmrNext = ptmr2;
0002c0  e581200c          STR      r2,[r1,#0xc]
;;;1025           if (ptmr2 != (OS_TMR *)0) {
0002c4  e3520000          CMP      r2,#0
0002c8  0a000000          BEQ      |L1.720|
;;;1026               ptmr2->OSTmrPrev = (void *)ptmr1;
0002cc  e5821010          STR      r1,[r2,#0x10]
                  |L1.720|
;;;1027           }
;;;1028       }
;;;1029       ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
0002d0  e3a0e001          MOV      lr,#1
0002d4  e5c0e031          STRB     lr,[r0,#0x31]
;;;1030       ptmr->OSTmrNext  = (void *)0;
0002d8  e3a0e000          MOV      lr,#0
0002dc  e580e00c          STR      lr,[r0,#0xc]
;;;1031       ptmr->OSTmrPrev  = (void *)0;
0002e0  e580e010          STR      lr,[r0,#0x10]
;;;1032       pspoke->OSTmrEntries--;
0002e4  e1d3e0b4          LDRH     lr,[r3,#4]
0002e8  e24ee001          SUB      lr,lr,#1
0002ec  e1c3e0b4          STRH     lr,[r3,#4]
;;;1033   }
0002f0  e49de004          POP      {lr}
0002f4  e12fff1e          BX       lr
                          ENDP

                  OSTmrDel PROC
;;;214                       INT8U   *perr)
;;;215    {
0002f8  e92d4070          PUSH     {r4-r6,lr}
0002fc  e1a05000          MOV      r5,r0
000300  e1a04001          MOV      r4,r1
;;;216    #if OS_ARG_CHK_EN > 0
;;;217        if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
000304  e3540000          CMP      r4,#0
000308  1a000002          BNE      |L1.792|
;;;218            return (OS_FALSE);
00030c  e3a00000          MOV      r0,#0
                  |L1.784|
000310  e8bd4070          POP      {r4-r6,lr}
;;;219        }
;;;220        if (ptmr == (OS_TMR *)0) {
;;;221            *perr = OS_ERR_TMR_INVALID;
;;;222            return (OS_FALSE);
;;;223        }
;;;224    #endif
;;;225        if (ptmr->OSTmrType != OS_TMR_TYPE) {                   /* Validate timer structure                               */
;;;226            *perr = OS_ERR_TMR_INVALID_TYPE;
;;;227            return (OS_FALSE);
;;;228        }
;;;229        if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
;;;230            *perr  = OS_ERR_TMR_ISR;
;;;231            return (OS_FALSE);
;;;232        }
;;;233        OSTmr_Lock();
;;;234        switch (ptmr->OSTmrState) {
;;;235            case OS_TMR_STATE_RUNNING:
;;;236                 OSTmr_Unlink(ptmr);                            /* Remove from current wheel spoke                        */
;;;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                    */
;;;245                 OSTmr_Unlock();
;;;246                 *perr = OS_ERR_NONE;
;;;247                 return (OS_TRUE);
;;;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    }
000314  e12fff1e          BX       lr
                  |L1.792|
000318  e3550000          CMP      r5,#0
00031c  1a000003          BNE      |L1.816|
000320  e3a0008a          MOV      r0,#0x8a
000324  e5c40000          STRB     r0,[r4,#0]
000328  e3a00000          MOV      r0,#0
00032c  eafffff7          B        |L1.784|
                  |L1.816|
000330  e5d50000          LDRB     r0,[r5,#0]
000334  e3500064          CMP      r0,#0x64
000338  0a000003          BEQ      |L1.844|
00033c  e3a00089          MOV      r0,#0x89
000340  e5c40000          STRB     r0,[r4,#0]
000344  e3a00000          MOV      r0,#0
000348  eafffff0          B        |L1.784|
                  |L1.844|
00034c  e59f0a24          LDR      r0,|L1.3448|
000350  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000354  e3500000          CMP      r0,#0
000358  da000003          BLE      |L1.876|
00035c  e3a0008b          MOV      r0,#0x8b
000360  e5c40000          STRB     r0,[r4,#0]
000364  e3a00000          MOV      r0,#0
000368  eaffffe8          B        |L1.784|
                  |L1.876|
00036c  ebfffffe          BL       OSTmr_Lock
000370  e5d50031          LDRB     r0,[r5,#0x31]
000374  e3500000          CMP      r0,#0
000378  0a000018          BEQ      |L1.992|
00037c  e3500001          CMP      r0,#1
000380  0a00000d          BEQ      |L1.956|
000384  e3500002          CMP      r0,#2
000388  0a00000d          BEQ      |L1.964|
00038c  e3500003          CMP      r0,#3
000390  1a000018          BNE      |L1.1016|
000394  e1a00000          MOV      r0,r0
000398  e1a00005          MOV      r0,r5
00039c  ebfffffe          BL       OSTmr_Unlink
0003a0  e1a00005          MOV      r0,r5
0003a4  ebfffffe          BL       OSTmr_Free
0003a8  ebfffffe          BL       OSTmr_Unlock
0003ac  e3a00000          MOV      r0,#0
0003b0  e5c40000          STRB     r0,[r4,#0]
0003b4  e3a00001          MOV      r0,#1
0003b8  eaffffd4          B        |L1.784|
                  |L1.956|
0003bc  e1a00000          MOV      r0,r0
0003c0  e1a00000          MOV      r0,r0
                  |L1.964|
0003c4  e1a00005          MOV      r0,r5
0003c8  ebfffffe          BL       OSTmr_Free
0003cc  ebfffffe          BL       OSTmr_Unlock
0003d0  e3a00000          MOV      r0,#0
0003d4  e5c40000          STRB     r0,[r4,#0]
0003d8  e3a00001          MOV      r0,#1
0003dc  eaffffcb          B        |L1.784|
                  |L1.992|
0003e0  e1a00000          MOV      r0,r0
0003e4  ebfffffe          BL       OSTmr_Unlock
0003e8  e3a00087          MOV      r0,#0x87
0003ec  e5c40000          STRB     r0,[r4,#0]
0003f0  e3a00000          MOV      r0,#0
0003f4  eaffffc5          B        |L1.784|
                  |L1.1016|
0003f8  e1a00000          MOV      r0,r0
0003fc  ebfffffe          BL       OSTmr_Unlock
000400  e3a0008d          MOV      r0,#0x8d
000404  e5c40000          STRB     r0,[r4,#0]
000408  e3a00000          MOV      r0,#0
00040c  eaffffbf          B        |L1.784|
                          ENDP

                  OSTmrNameGet PROC
;;;290                         INT8U   *perr)
;;;291    {
000410  e92d41f0          PUSH     {r4-r8,lr}
000414  e1a04000          MOV      r4,r0
000418  e1a05001          MOV      r5,r1
00041c  e1a06002          MOV      r6,r2
;;;292        INT8U  len;
;;;293    
;;;294    
;;;295    #if OS_ARG_CHK_EN > 0
;;;296        if (perr == (INT8U *)0) {
000420  e3560000          CMP      r6,#0
000424  1a000002          BNE      |L1.1076|
;;;297            return (0);
000428  e3a00000          MOV      r0,#0
                  |L1.1068|
00042c  e8bd41f0          POP      {r4-r8,lr}
;;;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                                    */
;;;309            *perr = OS_ERR_TMR_INVALID_TYPE;
;;;310            return (0);
;;;311        }
;;;312        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
;;;313            *perr  = OS_ERR_TMR_ISR;
;;;314            return (0);
;;;315        }
;;;316        OSTmr_Lock();
;;;317        switch (ptmr->OSTmrState) {
;;;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);
;;;322                 OSTmr_Unlock();
;;;323                 *perr = OS_ERR_NONE;
;;;324                 return (len);
;;;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    }
000430  e12fff1e          BX       lr
                  |L1.1076|
000434  e3550000          CMP      r5,#0
000438  1a000003          BNE      |L1.1100|
00043c  e3a00088          MOV      r0,#0x88
000440  e5c60000          STRB     r0,[r6,#0]
000444  e3a00000          MOV      r0,#0
000448  eafffff7          B        |L1.1068|
                  |L1.1100|
00044c  e3540000          CMP      r4,#0
000450  1a000003          BNE      |L1.1124|
000454  e3a0008a          MOV      r0,#0x8a
000458  e5c60000          STRB     r0,[r6,#0]
00045c  e3a00000          MOV      r0,#0
000460  eafffff1          B        |L1.1068|
                  |L1.1124|
000464  e5d40000          LDRB     r0,[r4,#0]
000468  e3500064          CMP      r0,#0x64
00046c  0a000003          BEQ      |L1.1152|
000470  e3a00089          MOV      r0,#0x89
000474  e5c60000          STRB     r0,[r6,#0]
000478  e3a00000          MOV      r0,#0
00047c  eaffffea          B        |L1.1068|
                  |L1.1152|
000480  e59f08f0          LDR      r0,|L1.3448|
000484  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000488  e3500000          CMP      r0,#0
00048c  da000003          BLE      |L1.1184|
000490  e3a0008b          MOV      r0,#0x8b
000494  e5c60000          STRB     r0,[r6,#0]
000498  e3a00000          MOV      r0,#0
00049c  eaffffe2          B        |L1.1068|

⌨️ 快捷键说明

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