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

📄 os_tmr.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;645                          if (pfnct != (OS_TMR_CALLBACK)0) {
;;;646                              (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg);  /* Use callback arg when timer was created */
;;;647                          } else {
;;;648                              OSTmr_Unlock();
;;;649                              *perr = OS_ERR_TMR_NO_CALLBACK;
;;;650                              return (OS_FALSE);
;;;651                          }
;;;652                          break;
;;;653    
;;;654                     case OS_TMR_OPT_CALLBACK_ARG:
;;;655                          pfnct = ptmr->OSTmrCallback;                /* Execute callback function if available ...       */
;;;656                          if (pfnct != (OS_TMR_CALLBACK)0) {
;;;657                              (*pfnct)((void *)ptmr, callback_arg);   /* ... using the 'callback_arg' provided in call    */
;;;658                          } else {
;;;659                              OSTmr_Unlock();
;;;660                              *perr = OS_ERR_TMR_NO_CALLBACK;
;;;661                              return (OS_FALSE);
;;;662                          }
;;;663                          break;
;;;664    
;;;665                     case OS_TMR_OPT_NONE:
;;;666                          break;
;;;667    
;;;668                     default:
;;;669                         OSTmr_Unlock();
;;;670                         *perr = OS_ERR_TMR_INVALID_OPT;
;;;671                         return (OS_FALSE);
;;;672                 }
;;;673                 OSTmr_Unlock();
;;;674                 return (OS_TRUE);
;;;675    
;;;676            case OS_TMR_STATE_COMPLETED:                              /* Timer has already completed the ONE-SHOT or ...  */
;;;677            case OS_TMR_STATE_STOPPED:                                /* ... timer has not started yet.                   */
;;;678                 OSTmr_Unlock();
;;;679                 *perr = OS_ERR_TMR_STOPPED;
;;;680                 return (OS_TRUE);
;;;681    
;;;682            case OS_TMR_STATE_UNUSED:                                 /* Timer was not created                            */
;;;683                 OSTmr_Unlock();
;;;684                 *perr = OS_ERR_TMR_INACTIVE;
;;;685                 return (OS_FALSE);
;;;686    
;;;687            default:
;;;688                 OSTmr_Unlock();
;;;689                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;690                 return (OS_FALSE);
;;;691        }
;;;692    }
000984  e12fff1e          BX       lr
                  |L1.2440|
000988  e3540000          CMP      r4,#0
00098c  1a000003          BNE      |L1.2464|
000990  e3a0008a          MOV      r0,#0x8a
000994  e5c80000          STRB     r0,[r8,#0]
000998  e3a00000          MOV      r0,#0
00099c  eafffff7          B        |L1.2432|
                  |L1.2464|
0009a0  e5d40000          LDRB     r0,[r4,#0]
0009a4  e3500064          CMP      r0,#0x64
0009a8  0a000003          BEQ      |L1.2492|
0009ac  e3a00089          MOV      r0,#0x89
0009b0  e5c80000          STRB     r0,[r8,#0]
0009b4  e3a00000          MOV      r0,#0
0009b8  eafffff0          B        |L1.2432|
                  |L1.2492|
0009bc  e59f03b4          LDR      r0,|L1.3448|
0009c0  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
0009c4  e3500000          CMP      r0,#0
0009c8  da000003          BLE      |L1.2524|
0009cc  e3a0008b          MOV      r0,#0x8b
0009d0  e5c80000          STRB     r0,[r8,#0]
0009d4  e3a00000          MOV      r0,#0
0009d8  eaffffe8          B        |L1.2432|
                  |L1.2524|
0009dc  ebfffffe          BL       OSTmr_Lock
0009e0  e5d40031          LDRB     r0,[r4,#0x31]
0009e4  e3500000          CMP      r0,#0
0009e8  0a000042          BEQ      |L1.2808|
0009ec  e3500001          CMP      r0,#1
0009f0  0a00003b          BEQ      |L1.2788|
0009f4  e3500002          CMP      r0,#2
0009f8  0a000037          BEQ      |L1.2780|
0009fc  e3500003          CMP      r0,#3
000a00  1a000042          BNE      |L1.2832|
000a04  e1a00000          MOV      r0,r0
000a08  e1a00004          MOV      r0,r4
000a0c  ebfffffe          BL       OSTmr_Unlink
000a10  e3a00000          MOV      r0,#0
000a14  e5c80000          STRB     r0,[r8,#0]
000a18  e3550000          CMP      r5,#0
000a1c  0a000022          BEQ      |L1.2732|
000a20  e3550003          CMP      r5,#3
000a24  0a000002          BEQ      |L1.2612|
000a28  e3550004          CMP      r5,#4
000a2c  1a000020          BNE      |L1.2740|
000a30  ea00000e          B        |L1.2672|
                  |L1.2612|
000a34  e1a00000          MOV      r0,r0
000a38  e5946004          LDR      r6,[r4,#4]
000a3c  e3560000          CMP      r6,#0
000a40  0a000004          BEQ      |L1.2648|
000a44  e5941008          LDR      r1,[r4,#8]
000a48  e1a00004          MOV      r0,r4
000a4c  e1a0e00f          MOV      lr,pc
000a50  e12fff16          BX       r6
000a54  ea000004          B        |L1.2668|
                  |L1.2648|
000a58  ebfffffe          BL       OSTmr_Unlock
000a5c  e3a0008f          MOV      r0,#0x8f
000a60  e5c80000          STRB     r0,[r8,#0]
000a64  e3a00000          MOV      r0,#0
000a68  eaffffc4          B        |L1.2432|
                  |L1.2668|
000a6c  ea000016          B        |L1.2764|
                  |L1.2672|
000a70  e1a00000          MOV      r0,r0
000a74  e5946004          LDR      r6,[r4,#4]
000a78  e3560000          CMP      r6,#0
000a7c  0a000004          BEQ      |L1.2708|
000a80  e1a01007          MOV      r1,r7
000a84  e1a00004          MOV      r0,r4
000a88  e1a0e00f          MOV      lr,pc
000a8c  e12fff16          BX       r6
000a90  ea000004          B        |L1.2728|
                  |L1.2708|
000a94  ebfffffe          BL       OSTmr_Unlock
000a98  e3a0008f          MOV      r0,#0x8f
000a9c  e5c80000          STRB     r0,[r8,#0]
000aa0  e3a00000          MOV      r0,#0
000aa4  eaffffb5          B        |L1.2432|
                  |L1.2728|
000aa8  ea000007          B        |L1.2764|
                  |L1.2732|
000aac  e1a00000          MOV      r0,r0
000ab0  ea000005          B        |L1.2764|
                  |L1.2740|
000ab4  e1a00000          MOV      r0,r0
000ab8  ebfffffe          BL       OSTmr_Unlock
000abc  e3a00084          MOV      r0,#0x84
000ac0  e5c80000          STRB     r0,[r8,#0]
000ac4  e3a00000          MOV      r0,#0
000ac8  eaffffac          B        |L1.2432|
                  |L1.2764|
000acc  e1a00000          MOV      r0,r0
000ad0  ebfffffe          BL       OSTmr_Unlock
000ad4  e3a00001          MOV      r0,#1
000ad8  eaffffa8          B        |L1.2432|
                  |L1.2780|
000adc  e1a00000          MOV      r0,r0
000ae0  e1a00000          MOV      r0,r0
                  |L1.2788|
000ae4  ebfffffe          BL       OSTmr_Unlock
000ae8  e3a0008e          MOV      r0,#0x8e
000aec  e5c80000          STRB     r0,[r8,#0]
000af0  e3a00001          MOV      r0,#1
000af4  eaffffa1          B        |L1.2432|
                  |L1.2808|
000af8  e1a00000          MOV      r0,r0
000afc  ebfffffe          BL       OSTmr_Unlock
000b00  e3a00087          MOV      r0,#0x87
000b04  e5c80000          STRB     r0,[r8,#0]
000b08  e3a00000          MOV      r0,#0
000b0c  eaffff9b          B        |L1.2432|
                  |L1.2832|
000b10  e1a00000          MOV      r0,r0
000b14  ebfffffe          BL       OSTmr_Unlock
000b18  e3a0008d          MOV      r0,#0x8d
000b1c  e5c80000          STRB     r0,[r8,#0]
000b20  e3a00000          MOV      r0,#0
000b24  eaffff95          B        |L1.2432|
                          ENDP

                  OSTmrSignal PROC
;;;716    INT8U  OSTmrSignal (void)
;;;717    {
000b28  e92d4010          PUSH     {r4,lr}
;;;718        INT8U  err;
;;;719    
;;;720    
;;;721        err = OSSemPost(OSTmrSemSignal);
000b2c  e59f0250          LDR      r0,|L1.3460|
000b30  e5900000          LDR      r0,[r0,#0]  ; OSTmrSemSignal
000b34  ebfffffe          BL       OSSemPost
000b38  e1a04000          MOV      r4,r0
;;;722        return (err);
000b3c  e1a00004          MOV      r0,r4
000b40  e8bd4010          POP      {r4,lr}
;;;723    }
000b44  e12fff1e          BX       lr
                          ENDP

                  OSTmr_Task PROC
;;;1083   static  void  OSTmr_Task (void *p_arg)
;;;1084   {
000b48  e92d43f8          PUSH     {r3-r9,lr}
;;;1085       INT8U            err;
;;;1086       OS_TMR          *ptmr;
;;;1087       OS_TMR          *ptmr_next;
;;;1088       OS_TMR_CALLBACK  pfnct;
;;;1089       OS_TMR_WHEEL    *pspoke;
;;;1090       INT16U           spoke;
;;;1091   
;;;1092   
;;;1093       (void)p_arg;                                                 /* Not using 'p_arg', prevent compiler warning       */
;;;1094       for (;;) {
000b4c  e1a00000          MOV      r0,r0
                  |L1.2896|
;;;1095           OSSemPend(OSTmrSemSignal, 0, &err);                      /* Wait for signal indicating time to update timers  */
000b50  e28d2000          ADD      r2,sp,#0
000b54  e3a01000          MOV      r1,#0
000b58  e59f0224          LDR      r0,|L1.3460|
000b5c  e5900000          LDR      r0,[r0,#0]  ; OSTmrSemSignal
000b60  ebfffffe          BL       OSSemPend
;;;1096           OSTmr_Lock();
000b64  ebfffffe          BL       OSTmr_Lock
;;;1097           OSTmrTime++;                                             /* Increment the current time                        */
000b68  e59f0210          LDR      r0,|L1.3456|
000b6c  e5900000          LDR      r0,[r0,#0]  ; OSTmrTime
000b70  e2800001          ADD      r0,r0,#1
000b74  e59f1204          LDR      r1,|L1.3456|
000b78  e5810000          STR      r0,[r1,#0]  ; OSTmrTime
;;;1098           spoke  = (INT16U)(OSTmrTime % OS_TMR_CFG_WHEEL_SIZE);    /* Position on current timer wheel entry             */
000b7c  e2810000          ADD      r0,r1,#0
000b80  e5900000          LDR      r0,[r0,#0]  ; OSTmrTime
000b84  e2006007          AND      r6,r0,#7
;;;1099           pspoke = &OSTmrWheelTbl[spoke];
000b88  e59f01ec          LDR      r0,|L1.3452|
000b8c  e0808186          ADD      r8,r0,r6,LSL #3
;;;1100           ptmr   = pspoke->OSTmrFirst;
000b90  e5984000          LDR      r4,[r8,#0]
;;;1101           while (ptmr != (OS_TMR *)0) {
000b94  ea000018          B        |L1.3068|
                  |L1.2968|
;;;1102               ptmr_next = (OS_TMR *)ptmr->OSTmrNext;               /* Point to next timer to update because current ... */
000b98  e594500c          LDR      r5,[r4,#0xc]
;;;1103                                                                    /* ... timer could get unlinked from the wheel.      */
;;;1104               if (OSTmrTime == ptmr->OSTmrMatch) {                 /* Process each timer that expires                   */
000b9c  e59f11dc          LDR      r1,|L1.3456|
000ba0  e5940014          LDR      r0,[r4,#0x14]
000ba4  e5911000          LDR      r1,[r1,#0]  ; OSTmrTime
000ba8  e1500001          CMP      r0,r1
000bac  1a000011          BNE      |L1.3064|
;;;1105                   pfnct = ptmr->OSTmrCallback;                     /* Execute callback function if available            */
000bb0  e5947004          LDR      r7,[r4,#4]
;;;1106                   if (pfnct != (OS_TMR_CALLBACK)0) {
000bb4  e3570000          CMP      r7,#0
000bb8  0a000003          BEQ      |L1.3020|
;;;1107                       (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg);
000bbc  e5941008          LDR      r1,[r4,#8]
000bc0  e1a00004          MOV      r0,r4
000bc4  e1a0e00f          MOV      lr,pc
000bc8  e12fff17          BX       r7
                  |L1.3020|
;;;1108                   }
;;;1109                   OSTmr_Unlink(ptmr);                              /* Remove from current wheel spoke                   */
000bcc  e1a00004          MOV      r0,r4
000bd0  ebfffffe          BL       OSTmr_Unlink
;;;1110                   if (ptmr->OSTmrOpt == OS_TMR_OPT_PERIODIC) {
000bd4  e5d40030          LDRB     r0,[r4,#0x30]
000bd8  e3500002          CMP      r0,#2
000bdc  1a000003          BNE      |L1.3056|
;;;1111                       OSTmr_Link(ptmr, OS_TMR_LINK_PERIODIC);      /* Recalculate new position of timer in wheel        */
000be0  e3a01001          MOV      r1,#1
000be4  e1a00004          MOV      r0,r4
000be8  ebfffffe          BL       OSTmr_Link
000bec  ea000001          B        |L1.3064|
                  |L1.3056|
;;;1112                   } else {
;;;1113                       ptmr->OSTmrState = OS_TMR_STATE_COMPLETED;   /* Indicate that the timer has completed             */
000bf0  e3a00002          MOV      r0,#2
000bf4  e5c40031          STRB     r0,[r4,#0x31]
                  |L1.3064|
;;;1114                   }
;;;1115               }
;;;1116               ptmr = ptmr_next;
000bf8  e1a04005          MOV      r4,r5
                  |L1.3068|
000bfc  e3540000          CMP      r4,#0
000c00  1affffe4          BNE      |L1.2968|
;;;1117           }
;;;1118           OSTmr_Unlock();
000c04  ebfffffe          BL       OSTmr_Unlock
000c08  eaffffd0          B        |L1.2896|
;;;1119       }
;;;1120   }
                          ENDP

                  OSTmr_InitTask PROC
;;;883    static  void  OSTmr_InitTask (void)
;;;884    {
000c0c  e52de

⌨️ 快捷键说明

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