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

📄 os_tmr.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                  |L1.1184|
0004a0  ebfffffe          BL       OSTmr_Lock
0004a4  e5d40031          LDRB     r0,[r4,#0x31]
0004a8  e3500000          CMP      r0,#0
0004ac  0a000011          BEQ      |L1.1272|
0004b0  e3500001          CMP      r0,#1
0004b4  0a000005          BEQ      |L1.1232|
0004b8  e3500002          CMP      r0,#2
0004bc  0a000004          BEQ      |L1.1236|
0004c0  e3500003          CMP      r0,#3
0004c4  1a000011          BNE      |L1.1296|
0004c8  e1a00000          MOV      r0,r0
0004cc  e1a00000          MOV      r0,r0
                  |L1.1232|
0004d0  e1a00000          MOV      r0,r0
                  |L1.1236|
0004d4  e2841020          ADD      r1,r4,#0x20
0004d8  e1a00005          MOV      r0,r5
0004dc  ebfffffe          BL       OS_StrCopy
0004e0  e1a07000          MOV      r7,r0
0004e4  ebfffffe          BL       OSTmr_Unlock
0004e8  e3a00000          MOV      r0,#0
0004ec  e5c60000          STRB     r0,[r6,#0]
0004f0  e1a00007          MOV      r0,r7
0004f4  eaffffcc          B        |L1.1068|
                  |L1.1272|
0004f8  e1a00000          MOV      r0,r0
0004fc  ebfffffe          BL       OSTmr_Unlock
000500  e3a00087          MOV      r0,#0x87
000504  e5c60000          STRB     r0,[r6,#0]
000508  e3a00000          MOV      r0,#0
00050c  eaffffc6          B        |L1.1068|
                  |L1.1296|
000510  e1a00000          MOV      r0,r0
000514  ebfffffe          BL       OSTmr_Unlock
000518  e3a0008d          MOV      r0,#0x8d
00051c  e5c60000          STRB     r0,[r6,#0]
000520  e3a00000          MOV      r0,#0
000524  eaffffc0          B        |L1.1068|
                          ENDP

                  OSTmrRemainGet PROC
;;;364                            INT8U   *perr)
;;;365    {
000528  e92d4070          PUSH     {r4-r6,lr}
00052c  e1a04000          MOV      r4,r0
000530  e1a05001          MOV      r5,r1
;;;366        INT32U  remain;
;;;367    
;;;368    
;;;369    #if OS_ARG_CHK_EN > 0
;;;370        if (perr == (INT8U *)0) {
000534  e3550000          CMP      r5,#0
000538  1a000002          BNE      |L1.1352|
;;;371            return (0);
00053c  e3a00000          MOV      r0,#0
                  |L1.1344|
000540  e8bd4070          POP      {r4-r6,lr}
;;;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                                    */
;;;379            *perr = OS_ERR_TMR_INVALID_TYPE;
;;;380            return (0);
;;;381        }
;;;382        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
;;;383            *perr = OS_ERR_TMR_ISR;
;;;384            return (0);
;;;385        }
;;;386        OSTmr_Lock();
;;;387        switch (ptmr->OSTmrState) {
;;;388            case OS_TMR_STATE_RUNNING:
;;;389                 remain = ptmr->OSTmrMatch - OSTmrTime;    /* Determine how much time is left to timeout                  */
;;;390                 OSTmr_Unlock();
;;;391                 *perr  = OS_ERR_NONE;
;;;392                 return (remain);
;;;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    }
000544  e12fff1e          BX       lr
                  |L1.1352|
000548  e3540000          CMP      r4,#0
00054c  1a000003          BNE      |L1.1376|
000550  e3a0008a          MOV      r0,#0x8a
000554  e5c50000          STRB     r0,[r5,#0]
000558  e3a00000          MOV      r0,#0
00055c  eafffff7          B        |L1.1344|
                  |L1.1376|
000560  e5d40000          LDRB     r0,[r4,#0]
000564  e3500064          CMP      r0,#0x64
000568  0a000003          BEQ      |L1.1404|
00056c  e3a00089          MOV      r0,#0x89
000570  e5c50000          STRB     r0,[r5,#0]
000574  e3a00000          MOV      r0,#0
000578  eafffff0          B        |L1.1344|
                  |L1.1404|
00057c  e59f07f4          LDR      r0,|L1.3448|
000580  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000584  e3500000          CMP      r0,#0
000588  da000003          BLE      |L1.1436|
00058c  e3a0008b          MOV      r0,#0x8b
000590  e5c50000          STRB     r0,[r5,#0]
000594  e3a00000          MOV      r0,#0
000598  eaffffe8          B        |L1.1344|
                  |L1.1436|
00059c  ebfffffe          BL       OSTmr_Lock
0005a0  e5d40031          LDRB     r0,[r4,#0x31]
0005a4  e3500000          CMP      r0,#0
0005a8  0a00002f          BEQ      |L1.1644|
0005ac  e3500001          CMP      r0,#1
0005b0  0a00000d          BEQ      |L1.1516|
0005b4  e3500002          CMP      r0,#2
0005b8  0a000026          BEQ      |L1.1624|
0005bc  e3500003          CMP      r0,#3
0005c0  1a00002f          BNE      |L1.1668|
0005c4  e1a00000          MOV      r0,r0
0005c8  e59f17b0          LDR      r1,|L1.3456|
0005cc  e5940014          LDR      r0,[r4,#0x14]
0005d0  e5911000          LDR      r1,[r1,#0]  ; OSTmrTime
0005d4  e0406001          SUB      r6,r0,r1
0005d8  ebfffffe          BL       OSTmr_Unlock
0005dc  e3a00000          MOV      r0,#0
0005e0  e5c50000          STRB     r0,[r5,#0]
0005e4  e1a00006          MOV      r0,r6
0005e8  eaffffd4          B        |L1.1344|
                  |L1.1516|
0005ec  e1a00000          MOV      r0,r0
0005f0  e5d40030          LDRB     r0,[r4,#0x30]
0005f4  e3500001          CMP      r0,#1
0005f8  0a00000c          BEQ      |L1.1584|
0005fc  e3500002          CMP      r0,#2
000600  1a00000c          BNE      |L1.1592|
000604  e1a00000          MOV      r0,r0
000608  e5940018          LDR      r0,[r4,#0x18]
00060c  e3500000          CMP      r0,#0
000610  1a000001          BNE      |L1.1564|
000614  e594601c          LDR      r6,[r4,#0x1c]
000618  ea000000          B        |L1.1568|
                  |L1.1564|
00061c  e5946018          LDR      r6,[r4,#0x18]
                  |L1.1568|
000620  ebfffffe          BL       OSTmr_Unlock
000624  e3a00000          MOV      r0,#0
000628  e5c50000          STRB     r0,[r5,#0]
00062c  ea000006          B        |L1.1612|
                  |L1.1584|
000630  e1a00000          MOV      r0,r0
000634  e1a00000          MOV      r0,r0
                  |L1.1592|
000638  e5946018          LDR      r6,[r4,#0x18]
00063c  ebfffffe          BL       OSTmr_Unlock
000640  e3a00000          MOV      r0,#0
000644  e5c50000          STRB     r0,[r5,#0]
000648  e1a00000          MOV      r0,r0
                  |L1.1612|
00064c  e1a00000          MOV      r0,r0
000650  e1a00006          MOV      r0,r6
000654  eaffffb9          B        |L1.1344|
                  |L1.1624|
000658  e1a00000          MOV      r0,r0
00065c  ebfffffe          BL       OSTmr_Unlock
000660  e3a00000          MOV      r0,#0
000664  e5c50000          STRB     r0,[r5,#0]
000668  eaffffb4          B        |L1.1344|
                  |L1.1644|
00066c  e1a00000          MOV      r0,r0
000670  ebfffffe          BL       OSTmr_Unlock
000674  e3a00087          MOV      r0,#0x87
000678  e5c50000          STRB     r0,[r5,#0]
00067c  e3a00000          MOV      r0,#0
000680  eaffffae          B        |L1.1344|
                  |L1.1668|
000684  e1a00000          MOV      r0,r0
000688  ebfffffe          BL       OSTmr_Unlock
00068c  e3a0008d          MOV      r0,#0x8d
000690  e5c50000          STRB     r0,[r5,#0]
000694  e3a00000          MOV      r0,#0
000698  eaffffa8          B        |L1.1344|
                          ENDP

                  OSTmrStateGet PROC
;;;461                          INT8U   *perr)
;;;462    {
00069c  e92d4070          PUSH     {r4-r6,lr}
0006a0  e1a04000          MOV      r4,r0
0006a4  e1a06001          MOV      r6,r1
;;;463        INT8U  state;
;;;464    
;;;465    
;;;466    #if OS_ARG_CHK_EN > 0
;;;467        if (perr == (INT8U *)0) {
0006a8  e3560000          CMP      r6,#0
0006ac  1a000002          BNE      |L1.1724|
;;;468            return (0);
0006b0  e3a00000          MOV      r0,#0
                  |L1.1716|
0006b4  e8bd4070          POP      {r4-r6,lr}
;;;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                                    */
;;;476            *perr = OS_ERR_TMR_INVALID_TYPE;
;;;477            return (0);
;;;478        }
;;;479        if (OSIntNesting > 0) {                            /* See if trying to call from an ISR                           */
;;;480            *perr = OS_ERR_TMR_ISR;
;;;481            return (0);
;;;482        }
;;;483        OSTmr_Lock();
;;;484        state = ptmr->OSTmrState;
;;;485        switch (state) {
;;;486            case OS_TMR_STATE_UNUSED:   
;;;487            case OS_TMR_STATE_STOPPED:  
;;;488            case OS_TMR_STATE_COMPLETED:
;;;489            case OS_TMR_STATE_RUNNING:  
;;;490                 *perr = OS_ERR_NONE;
;;;491                 break;
;;;492                 
;;;493            default:
;;;494                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;495                 break;
;;;496        }
;;;497        OSTmr_Unlock();
;;;498        return (state);
;;;499    }
0006b8  e12fff1e          BX       lr
                  |L1.1724|
0006bc  e3540000          CMP      r4,#0
0006c0  1a000003          BNE      |L1.1748|
0006c4  e3a0008a          MOV      r0,#0x8a
0006c8  e5c60000          STRB     r0,[r6,#0]
0006cc  e3a00000          MOV      r0,#0
0006d0  eafffff7          B        |L1.1716|
                  |L1.1748|
0006d4  e5d40000          LDRB     r0,[r4,#0]
0006d8  e3500064          CMP      r0,#0x64
0006dc  0a000003          BEQ      |L1.1776|
0006e0  e3a00089          MOV      r0,#0x89
0006e4  e5c60000          STRB     r0,[r6,#0]
0006e8  e3a00000          MOV      r0,#0
0006ec  eafffff0          B        |L1.1716|
                  |L1.1776|
0006f0  e59f0680          LDR      r0,|L1.3448|
0006f4  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0006f8  e3500000          CMP      r0,#0
0006fc  da000003          BLE      |L1.1808|
000700  e3a0008b          MOV      r0,#0x8b
000704  e5c60000          STRB     r0,[r6,#0]
000708  e3a00000          MOV      r0,#0
00070c  eaffffe8          B        |L1.1716|
                  |L1.1808|
000710  ebfffffe          BL       OSTmr_Lock
000714  e5d45031          LDRB     r5,[r4,#0x31]

⌨️ 快捷键说明

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