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

📄 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 页
字号:
;;;678                 OSTmr_Unlock();
;;;679                 *perr = OS_ERR_TMR_INACTIVE;
;;;680                 return (OS_FALSE);
;;;681    
;;;682            default:
;;;683                 OSTmr_Unlock();
;;;684                 *perr = OS_ERR_TMR_INVALID_STATE;
;;;685                 return (OS_FALSE);
;;;686        }
;;;687    }
000688  e12fff1e          BX       lr
                  |L1.1676|
00068c  e5970000          LDR      r0,[r7,#0]  ; OSTmrSem
000690  ebfffffe          BL       OSSemPost
000694  e3a0008e          MOV      r0,#0x8e              ;674
000698  e5c40000          STRB     r0,[r4,#0]            ;674
00069c  eafffff7          B        |L1.1664|
                  |L1.1696|
0006a0  e5970000          LDR      r0,[r7,#0]            ;675  ; OSTmrSem
0006a4  ebfffffe          BL       OSSemPost
0006a8  e3a00087          MOV      r0,#0x87              ;679
                  |L1.1708|
0006ac  e5c40000          STRB     r0,[r4,#0]            ;684
0006b0  e3a00000          MOV      r0,#0                 ;685
0006b4  eafffff2          B        |L1.1668|
                  |L1.1720|
0006b8  e5970000          LDR      r0,[r7,#0]            ;685  ; OSTmrSem
0006bc  ebfffffe          BL       OSSemPost
0006c0  e3a0008d          MOV      r0,#0x8d              ;684
0006c4  eafffff8          B        |L1.1708|
;;;688    #endif
                          ENDP

                  OSTmrSignal PROC
;;;715    
;;;716        err = OSSemPost(OSTmrSemSignal);
0006c8  e59f0218          LDR      r0,|L1.2280|
0006cc  e5900000          LDR      r0,[r0,#0]  ; OSTmrSemSignal
0006d0  eafffffe          B        OSSemPost
;;;717        return (err);
;;;718    }
;;;719    #endif
                          ENDP

                  OSTmr_Task PROC
;;;1078   static  void  OSTmr_Task (void *p_arg)
;;;1079   {
0006d4  e92d43f8          PUSH     {r3-r9,lr}
0006d8  e59f8208          LDR      r8,|L1.2280|
0006dc  e59f91fc          LDR      r9,|L1.2272|
0006e0  e59f61fc          LDR      r6,|L1.2276|
                  |L1.1764|
;;;1080       INT8U            err;
;;;1081       OS_TMR          *ptmr;
;;;1082       OS_TMR          *ptmr_next;
;;;1083       OS_TMR_CALLBACK  pfnct;
;;;1084       OS_TMR_WHEEL    *pspoke;
;;;1085       INT16U           spoke;
;;;1086   
;;;1087   
;;;1088       (void)p_arg;                                                 /* Not using 'p_arg', prevent compiler warning       */
;;;1089       for (;;) {
;;;1090           OSSemPend(OSTmrSemSignal, 0, &err);                      /* Wait for signal indicating time to update timers  */
0006e4  e5980000          LDR      r0,[r8,#0]  ; OSTmrSemSignal
0006e8  e28d2000          ADD      r2,sp,#0
0006ec  e3a01000          MOV      r1,#0
0006f0  ebfffffe          BL       OSSemPend
;;;1091           OSTmr_Lock();
0006f4  ebfffffe          BL       OSTmr_Lock
;;;1092           OSTmrTime++;                                             /* Increment the current time                        */
0006f8  e5960000          LDR      r0,[r6,#0]  ; OSTmrTime
;;;1093           spoke  = (INT16U)(OSTmrTime % OS_TMR_CFG_WHEEL_SIZE);    /* Position on current timer wheel entry             */
;;;1094           pspoke = &OSTmrWheelTbl[spoke];
;;;1095           ptmr   = pspoke->OSTmrFirst;
0006fc  e3a07002          MOV      r7,#2
000700  e2800001          ADD      r0,r0,#1              ;1092
000704  e5860000          STR      r0,[r6,#0]            ;1092  ; OSTmrTime
000708  e2000007          AND      r0,r0,#7              ;1093
00070c  e7994180          LDR      r4,[r9,r0,LSL #3]
000710  ea000014          B        |L1.1896|
                  |L1.1812|
;;;1096           while (ptmr != (OS_TMR *)0) {
;;;1097               ptmr_next = (OS_TMR *)ptmr->OSTmrNext;               /* Point to next timer to update because current ... */
;;;1098                                                                    /* ... timer could get unlinked from the wheel.      */
;;;1099               if (OSTmrTime == ptmr->OSTmrMatch) {                 /* Process each timer that expires                   */
000714  e5940014          LDR      r0,[r4,#0x14]
000718  e5961000          LDR      r1,[r6,#0]  ; OSTmrTime
00071c  e594500c          LDR      r5,[r4,#0xc]
000720  e1500001          CMP      r0,r1
000724  1a00000e          BNE      |L1.1892|
;;;1100                   pfnct = ptmr->OSTmrCallback;                     /* Execute callback function if available            */
000728  e5942004          LDR      r2,[r4,#4]
;;;1101                   if (pfnct != (OS_TMR_CALLBACK)0) {
00072c  e3520000          CMP      r2,#0
;;;1102                       (*pfnct)((void *)ptmr, ptmr->OSTmrCallbackArg);
000730  15941008          LDRNE    r1,[r4,#8]
000734  11a00004          MOVNE    r0,r4
000738  11a0e00f          MOVNE    lr,pc
00073c  112fff12          BXNE     r2
;;;1103                   }
;;;1104                   OSTmr_Unlink(ptmr);                              /* Remove from current wheel spoke                   */
000740  e1a00004          MOV      r0,r4
000744  ebfffffe          BL       OSTmr_Unlink
;;;1105                   if (ptmr->OSTmrOpt == OS_TMR_OPT_PERIODIC) {
000748  e5d40030          LDRB     r0,[r4,#0x30]
00074c  e3500002          CMP      r0,#2
;;;1106                       OSTmr_Link(ptmr, OS_TMR_LINK_PERIODIC);      /* Recalculate new position of timer in wheel        */
;;;1107                   } else {
;;;1108                       ptmr->OSTmrState = OS_TMR_STATE_COMPLETED;   /* Indicate that the timer has completed             */
000750  15c47031          STRBNE   r7,[r4,#0x31]
000754  1a000002          BNE      |L1.1892|
000758  e3a01001          MOV      r1,#1                 ;1106
00075c  e1a00004          MOV      r0,r4                 ;1106
000760  ebfffffe          BL       OSTmr_Link
                  |L1.1892|
;;;1109                   }
;;;1110               }
;;;1111               ptmr = ptmr_next;
000764  e1a04005          MOV      r4,r5
                  |L1.1896|
000768  e3540000          CMP      r4,#0                 ;1096
00076c  1affffe8          BNE      |L1.1812|
000770  e59f0164          LDR      r0,|L1.2268|
000774  e5900000          LDR      r0,[r0,#0]            ;1096  ; OSTmrSem
000778  ebfffffe          BL       OSSemPost
;;;1112           }
;;;1113           OSTmr_Unlock();
00077c  eaffffd8          B        |L1.1764|
;;;1114       }
;;;1115   }
;;;1116   #endif
                          ENDP

                  OSTmr_Init PROC
;;;804    void  OSTmr_Init (void)
;;;805    {
000780  e92d4030          PUSH     {r4,r5,lr}
;;;806    #if OS_EVENT_NAME_SIZE > 10
;;;807        INT8U    err;
;;;808    #endif
;;;809        INT16U   i;
;;;810        OS_TMR  *ptmr1;
;;;811        OS_TMR  *ptmr2;
;;;812    
;;;813    
;;;814        OS_MemClr((INT8U *)&OSTmrTbl[0],      sizeof(OSTmrTbl));            /* Clear all the TMRs                         */
000784  e59f0160          LDR      r0,|L1.2284|
000788  e24dd01c          SUB      sp,sp,#0x1c           ;805
00078c  e3a01d0d          MOV      r1,#0x340
000790  ebfffffe          BL       OS_MemClr
;;;815        OS_MemClr((INT8U *)&OSTmrWheelTbl[0], sizeof(OSTmrWheelTbl));       /* Clear the timer wheel                      */
000794  e59f0144          LDR      r0,|L1.2272|
000798  e3a01040          MOV      r1,#0x40
00079c  ebfffffe          BL       OS_MemClr
;;;816    
;;;817        ptmr1 = &OSTmrTbl[0];
0007a0  e59f0144          LDR      r0,|L1.2284|
;;;818        ptmr2 = &OSTmrTbl[1];
;;;819        for (i = 0; i < (OS_TMR_CFG_MAX - 1); i++) {                        /* Init. list of free TMRs                    */
0007a4  e3a01000          MOV      r1,#0
0007a8  e2804000          ADD      r4,r0,#0              ;818
0007ac  e2842034          ADD      r2,r4,#0x34           ;818
0007b0  e1a03001          MOV      r3,r1
0007b4  e3a0e064          MOV      lr,#0x64
0007b8  e3a0c03f          MOV      r12,#0x3f
                  |L1.1980|
;;;820            ptmr1->OSTmrType    = OS_TMR_TYPE;
0007bc  e5c0e000          STRB     lr,[r0,#0]
;;;821            ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                      /* Indicate that timer is inactive            */
0007c0  e5c03031          STRB     r3,[r0,#0x31]
;;;822            ptmr1->OSTmrNext    = (void *)ptmr2;                            /* Link to next timer                         */
0007c4  e580200c          STR      r2,[r0,#0xc]
0007c8  e2811001          ADD      r1,r1,#1              ;819
;;;823    #if OS_TMR_CFG_NAME_SIZE > 1
;;;824            ptmr1->OSTmrName[0] = '?';                                      /* Unknown name                               */
0007cc  e5c0c020          STRB     r12,[r0,#0x20]
0007d0  e3c11801          BIC      r1,r1,#0x10000        ;819
;;;825            ptmr1->OSTmrName[1] = OS_ASCII_NUL;
0007d4  e5c03021          STRB     r3,[r0,#0x21]
0007d8  e351000f          CMP      r1,#0xf               ;819
;;;826    #endif
;;;827            ptmr1++;
0007dc  e2800034          ADD      r0,r0,#0x34
;;;828            ptmr2++;
0007e0  e2822034          ADD      r2,r2,#0x34
0007e4  3afffff4          BCC      |L1.1980|
;;;829        }
;;;830        ptmr1->OSTmrType    = OS_TMR_TYPE;
0007e8  e5c0e000          STRB     lr,[r0,#0]
;;;831        ptmr1->OSTmrState   = OS_TMR_STATE_UNUSED;                          /* Indicate that timer is inactive            */
0007ec  e5c03031          STRB     r3,[r0,#0x31]
;;;832        ptmr1->OSTmrNext    = (void *)0;                                    /* Last OS_TMR                                */
0007f0  e580300c          STR      r3,[r0,#0xc]
;;;833    #if OS_TMR_CFG_NAME_SIZE > 1
;;;834        ptmr1->OSTmrName[0] = '?';                                          /* Unknown name                               */
0007f4  e5c0c020          STRB     r12,[r0,#0x20]
;;;835        ptmr1->OSTmrName[1] = OS_ASCII_NUL;
0007f8  e5c03021          STRB     r3,[r0,#0x21]
;;;836    #endif
;;;837        OSTmrTime           = 0;
0007fc  e59f00e0          LDR      r0,|L1.2276|
;;;838        OSTmrUsed           = 0;
;;;839        OSTmrFree           = OS_TMR_CFG_MAX;
000800  e59f10d0          LDR      r1,|L1.2264|
000804  e5803000          STR      r3,[r0,#0]            ;837  ; OSTmrTime
000808  e59f00c4          LDR      r0,|L1.2260|
00080c  e1c030b0          STRH     r3,[r0,#0]            ;838  ; OSTmrUsed
000810  e3a00010          MOV      r0,#0x10
000814  e1c100b0          STRH     r0,[r1,#0]  ; OSTmrFree
;;;840        OSTmrFreeList       = &OSTmrTbl[0];
000818  e59f00b0          LDR      r0,|L1.2256|
00081c  e5804000          STR      r4,[r0,#0]  ; OSTmrFreeList
;;;841        OSTmrSem            = OSSemCreate(1);
000820  e3a00001          MOV      r0,#1
000824  ebfffffe          BL       OSSemCreate
000828  e59f40ac          LDR      r4,|L1.2268|
00082c  e5840000          STR      r0,[r4,#0]  ; OSTmrSem
;;;842        OSTmrSemSignal      = OSSemCreate(0);
000830  e3a00000          MOV      r0,#0
000834  ebfffffe          BL       OSSemCreate
000838  e59f50a8          LDR      r5,|L1.2280|
;;;843    
;;;844    #if OS_EVENT_NAME_SIZE > 18
;;;845        OSEventNameSet(OSTmrSem,       (INT8U *)"uC/OS-II TmrLock",   &err);/* Assign names to semaphores                 */
;;;846    #else
;;;847    #if OS_EVENT_NAME_SIZE > 10
;;;848        OSEventNameSet(OSTmrSem,       (INT8U *)"OS-TmrLock",         &err);
00083c  e28d2018          ADD      r2,sp,#0x18
000840  e5850000          STR      r0,[r5,#0]  ; OSTmrSemSignal
000844  e5940000          LDR      r0,[r4,#0]  ; OSTmrSem
000848  e28f10a0          ADR      r1,|L1.2288|
00084c  ebfffffe          BL       OSEventNameSet
;;;849    #endif
;;;850    #endif
;;;851    
;;;852    #if OS_EVENT_NAME_SIZE > 18
;;;853        OSEventNameSet(OSTmrSemSignal, (INT8U *)"uC/OS-II TmrSignal", &err);
;;;854    #else
;;;855    #if OS_EVENT_NAME_SIZE > 10
;;;856        OSEventNameSet(OSTmrSemSignal, (INT8U *)"OS-TmrSig",          &err);
000850  e5950000          LDR      r0,[r5,#0]  ; OSTmrSemSignal
000854  e28d2018          ADD      r2,sp,#0x18
000858  e28f109c          ADR      r1,|L1.2300|
00085c  ebfffffe          BL       OSEventNameSet
000860  e59f00a0          LDR      r0,|L1.2312|
000864  e3a03003          MOV      r3,#3
000868  e3a02000          MOV      r2,#0
00086c  e3a01080          MOV      r1,#0x80
000870  e98d000f          STMIB    sp,{r0-r3}
000874  e0633481          RSB      r3,r3,r1,LSL #9
000878  e2802f7f          ADD      r2,r0,#0x1fc
00087c  e58d3000          STR      r3,[sp,#0]
000880  e3a0301d          MOV      r3,#0x1d
000884  e3a01000          MOV      r1,#0
000888  e24f0f6f          ADR      r0,OSTmr_Task
00088c  ebfffffe          BL       OSTaskCreateExt
000890  e28d2014          ADD      r2,sp,#0x14
000894  e28f1070          ADR      r1,|L1.2316|
000898  e3a0001d          MOV      r0,#0x1d
00089c  ebfffffe          BL       OSTaskNameSet
;;;857    #endif
;;;858    #endif
;;;859    
;;;860        OSTmr_InitTask();
;;;861    }
0008a0  e28dd01c          ADD      sp,sp,#0x1c
0008a4  e8bd4030          POP      {r4,r5,lr}
0008a8  e12fff1e          BX       lr
;;;862    #endif
                          ENDP

                  OSTmr_Lock PROC
0008ac  e92d4008          PUSH     {r3,lr}               ;0
0008b0  e59f0024          LDR      r0,|L1.2268|
0008b4  e28d2000          ADD      r2,sp,#0              ;0
0008b8  e5900000          LDR      r0,[r0,#0]            ;0  ; OSTmrSem
0008bc  e3a01000          MOV      r1,#0                 ;0
0008c0  ebfffffe          BL       OSSemPend
0008c4  e8bd4008          POP      {r3,lr}               ;0
0008c8  e12fff1e          BX       lr                    ;0
                          ENDP

                  |L1.2252|
0008cc  00000000          DCD      OSIntNesting
                  |L1.2256|
0008d0  00000000          DCD      OSTmrFreeList
                  |L1.2260|
0008d4  00000000          DCD      OSTmrUsed
                  |L1.2264|
0008d8  00000000          DCD      OSTmrFree
                  |L1.2268|
0008dc  00000000          DCD      OSTmrSem
                  |L1.2272|
0008e0  00000000          DCD      OSTmrWheelTbl
                  |L1.2276|
0008e4  00000000          DCD      OSTmrTime
                  |L1.2280|
0008e8  00000000          DCD      OSTmrSemSignal
                  |L1.2284|
0008ec  00000000          DCD      OSTmrTbl
                  |L1.2288|
0008f0  4f532d54          DCB      "OS-T"
0008f4  6d724c6f          DCB      "mrLo"
0008f8  636b0000          DCB      "ck\0\0"
                  |L1.2300|
0008fc  4f532d54          DCB      "OS-T"
000900  6d725369          DCB      "mrSi"
000904  67000000          DCB      "g\0\0\0"
                  |L1.2312|
000908  00000000          DCD      OSTmrTaskStk
                  |L1.2316|
00090c  75432f4f          DCB      "uC/O"
000910  532d4949          DCB      "S-II"
000914  20546d72          DCB      " Tmr"
000918  00000000          DCB      "\0\0\0\0"

⌨️ 快捷键说明

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