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

📄 os_tmr.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_tmr.o --depend=os_tmr.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uCOS-II\Source\os_tmr.c]
                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  OSTmr_Unlock PROC
;;;1063   static  void  OSTmr_Unlock (void)
;;;1064   {
000000  e92d4010          PUSH     {r4,lr}
;;;1065       (void)OSSemPost(OSTmrSem);
000004  e59f0d5c          LDR      r0,|L1.3432|
000008  e5900000          LDR      r0,[r0,#0]  ; OSTmrSem
00000c  ebfffffe          BL       OSSemPost
;;;1066   }
000010  e8bd4010          POP      {r4,lr}
000014  e12fff1e          BX       lr
                          ENDP

                  OSTmr_Alloc PROC
;;;744    
;;;745        if (OSTmrFreeList == (OS_TMR *)0) {
000018  e59f0d4c          LDR      r0,|L1.3436|
00001c  e5900000          LDR      r0,[r0,#0]  ; OSTmrFreeList
000020  e3500000          CMP      r0,#0
000024  1a000001          BNE      |L1.48|
;;;746            return ((OS_TMR *)0);
000028  e3a00000          MOV      r0,#0
                  |L1.44|
;;;747        }
;;;748        ptmr            = (OS_TMR *)OSTmrFreeList;
;;;749        OSTmrFreeList   = (OS_TMR *)ptmr->OSTmrNext;
;;;750        ptmr->OSTmrNext = (OS_TCB *)0;
;;;751        ptmr->OSTmrPrev = (OS_TCB *)0;
;;;752        OSTmrUsed++;
;;;753        OSTmrFree--;
;;;754        return (ptmr);
;;;755    }
00002c  e12fff1e          BX       lr
                  |L1.48|
000030  e59f0d34          LDR      r0,|L1.3436|
000034  e5901000          LDR      r1,[r0,#0]  ; OSTmrFreeList
000038  e2802000          ADD      r2,r0,#0
00003c  e591000c          LDR      r0,[r1,#0xc]
000040  e5820000          STR      r0,[r2,#0]  ; OSTmrFreeList
000044  e3a00000          MOV      r0,#0
000048  e581000c          STR      r0,[r1,#0xc]
00004c  e5810010          STR      r0,[r1,#0x10]
000050  e59f0d18          LDR      r0,|L1.3440|
000054  e1d000b0          LDRH     r0,[r0,#0]  ; OSTmrUsed
000058  e2800001          ADD      r0,r0,#1
00005c  e3c00801          BIC      r0,r0,#0x10000
000060  e59f2d08          LDR      r2,|L1.3440|
000064  e1c200b0          STRH     r0,[r2,#0]  ; OSTmrUsed
000068  e59f0d04          LDR      r0,|L1.3444|
00006c  e1d000b0          LDRH     r0,[r0,#0]  ; OSTmrFree
000070  e2400001          SUB      r0,r0,#1
000074  e59f2cf8          LDR      r2,|L1.3444|
000078  e1c200b0          STRH     r0,[r2,#0]  ; OSTmrFree
00007c  e1a00001          MOV      r0,r1
000080  eaffffe9          B        |L1.44|
                          ENDP

                  OSTmr_Lock PROC
;;;1050   static  void  OSTmr_Lock (void)
;;;1051   {
000084  e92d4008          PUSH     {r3,lr}
;;;1052       INT8U  err;
;;;1053   
;;;1054   
;;;1055       OSSemPend(OSTmrSem, 0, &err);
000088  e28d2000          ADD      r2,sp,#0
00008c  e3a01000          MOV      r1,#0
000090  e59f0cd0          LDR      r0,|L1.3432|
000094  e5900000          LDR      r0,[r0,#0]  ; OSTmrSem
000098  ebfffffe          BL       OSSemPend
;;;1056       (void)err;
;;;1057   }
00009c  e8bd4008          POP      {r3,lr}
0000a0  e12fff1e          BX       lr
                          ENDP

                  OSTmrCreate PROC
;;;119                          INT8U           *perr)
;;;120    {
0000a4  e92d5ff0          PUSH     {r4-r12,lr}
0000a8  e1a04000          MOV      r4,r0
0000ac  e1a05001          MOV      r5,r1
0000b0  e1a06002          MOV      r6,r2
0000b4  e1a07003          MOV      r7,r3
0000b8  e59d8028          LDR      r8,[sp,#0x28]
0000bc  e59d9030          LDR      r9,[sp,#0x30]
;;;121        OS_TMR   *ptmr;
;;;122    #if OS_TMR_CFG_NAME_SIZE > 0
;;;123        INT8U     len;
;;;124    #endif
;;;125    
;;;126    
;;;127    #if OS_ARG_CHK_EN > 0
;;;128        if (perr == (INT8U *)0) {                               /* Validate arguments                                     */
0000c0  e3590000          CMP      r9,#0
0000c4  1a000002          BNE      |L1.212|
;;;129            return ((OS_TMR *)0);
0000c8  e3a00000          MOV      r0,#0
                  |L1.204|
0000cc  e8bd5ff0          POP      {r4-r12,lr}
;;;130        }
;;;131        switch (opt) {
;;;132            case OS_TMR_OPT_PERIODIC:
;;;133                 if (period == 0) {
;;;134                     *perr = OS_ERR_TMR_INVALID_PERIOD;
;;;135                     return ((OS_TMR *)0);
;;;136                 }
;;;137                 break;
;;;138    
;;;139            case OS_TMR_OPT_ONE_SHOT:
;;;140                 if (dly == 0) {
;;;141                     *perr = OS_ERR_TMR_INVALID_DLY;
;;;142                     return ((OS_TMR *)0);
;;;143                 }
;;;144                 break;
;;;145    
;;;146            default:
;;;147                 *perr = OS_ERR_TMR_INVALID_OPT;
;;;148                 return ((OS_TMR *)0);
;;;149        }
;;;150    #endif
;;;151        if (OSIntNesting > 0) {                                 /* See if trying to call from an ISR                      */
;;;152            *perr  = OS_ERR_TMR_ISR;
;;;153            return ((OS_TMR *)0);
;;;154        }
;;;155        OSTmr_Lock();
;;;156        ptmr = OSTmr_Alloc();                                   /* Obtain a timer from the free pool                      */
;;;157        if (ptmr == (OS_TMR *)0) {
;;;158            OSTmr_Unlock();
;;;159            *perr = OS_ERR_TMR_NON_AVAIL;
;;;160            return ((OS_TMR *)0);
;;;161        }
;;;162        ptmr->OSTmrState       = OS_TMR_STATE_STOPPED;          /* Indicate that timer is not running yet                 */
;;;163        ptmr->OSTmrDly         = dly;
;;;164        ptmr->OSTmrPeriod      = period;
;;;165        ptmr->OSTmrOpt         = opt;
;;;166        ptmr->OSTmrCallback    = callback;
;;;167        ptmr->OSTmrCallbackArg = callback_arg;
;;;168    #if OS_TMR_CFG_NAME_SIZE > 0
;;;169        if (pname !=(INT8U *)0) {
;;;170            len = OS_StrLen(pname);                             /* Copy timer name                                        */
;;;171            if (len < OS_TMR_CFG_NAME_SIZE) {
;;;172                (void)OS_StrCopy(ptmr->OSTmrName, pname);
;;;173            } else {
;;;174    #if OS_TMR_CFG_NAME_SIZE > 1
;;;175                ptmr->OSTmrName[0] = '#';                       /* Invalid size specified                                 */
;;;176                ptmr->OSTmrName[1] = OS_ASCII_NUL;
;;;177    #endif
;;;178                *perr              = OS_ERR_TMR_NAME_TOO_LONG;
;;;179                OSTmr_Unlock();
;;;180                return (ptmr);
;;;181            }
;;;182        }
;;;183    #endif
;;;184        OSTmr_Unlock();
;;;185        *perr = OS_ERR_NONE;
;;;186        return (ptmr);
;;;187    }
0000d0  e12fff1e          BX       lr
                  |L1.212|
0000d4  e3560001          CMP      r6,#1
0000d8  0a000009          BEQ      |L1.260|
0000dc  e3560002          CMP      r6,#2
0000e0  1a00000f          BNE      |L1.292|
0000e4  e1a00000          MOV      r0,r0
0000e8  e3550000          CMP      r5,#0
0000ec  1a000003          BNE      |L1.256|
0000f0  e3a00083          MOV      r0,#0x83
0000f4  e5c90000          STRB     r0,[r9,#0]
0000f8  e3a00000          MOV      r0,#0
0000fc  eafffff2          B        |L1.204|
                  |L1.256|
000100  ea00000c          B        |L1.312|
                  |L1.260|
000104  e1a00000          MOV      r0,r0
000108  e3540000          CMP      r4,#0
00010c  1a000003          BNE      |L1.288|
000110  e3a00082          MOV      r0,#0x82
000114  e5c90000          STRB     r0,[r9,#0]
000118  e3a00000          MOV      r0,#0
00011c  eaffffea          B        |L1.204|
                  |L1.288|
000120  ea000004          B        |L1.312|
                  |L1.292|
000124  e1a00000          MOV      r0,r0
000128  e3a00084          MOV      r0,#0x84
00012c  e5c90000          STRB     r0,[r9,#0]
000130  e3a00000          MOV      r0,#0
000134  eaffffe4          B        |L1.204|
                  |L1.312|
000138  e1a00000          MOV      r0,r0
00013c  e59f0c34          LDR      r0,|L1.3448|
000140  e5d00000          LDRB     r0,[r0,#0]  ; OSIntNesting
000144  e3500000          CMP      r0,#0
000148  da000003          BLE      |L1.348|
00014c  e3a0008b          MOV      r0,#0x8b
000150  e5c90000          STRB     r0,[r9,#0]
000154  e3a00000          MOV      r0,#0
000158  eaffffdb          B        |L1.204|
                  |L1.348|
00015c  ebfffffe          BL       OSTmr_Lock
000160  ebfffffe          BL       OSTmr_Alloc
000164  e1a0a000          MOV      r10,r0
000168  e35a0000          CMP      r10,#0
00016c  1a000004          BNE      |L1.388|
000170  ebfffffe          BL       OSTmr_Unlock
000174  e3a00086          MOV      r0,#0x86
000178  e5c90000          STRB     r0,[r9,#0]
00017c  e3a00000          MOV      r0,#0
000180  eaffffd1          B        |L1.204|
                  |L1.388|
000184  e3a00001          MOV      r0,#1
000188  e5ca0031          STRB     r0,[r10,#0x31]
00018c  e58a4018          STR      r4,[r10,#0x18]
000190  e58a501c          STR      r5,[r10,#0x1c]
000194  e5ca6030          STRB     r6,[r10,#0x30]
000198  e58a7004          STR      r7,[r10,#4]
00019c  e58a8008          STR      r8,[r10,#8]
0001a0  e59d002c          LDR      r0,[sp,#0x2c]
0001a4  e3500000          CMP      r0,#0
0001a8  0a000011          BEQ      |L1.500|
0001ac  e59d002c          LDR      r0,[sp,#0x2c]
0001b0  ebfffffe          BL       OS_StrLen
0001b4  e1a0b000          MOV      r11,r0
0001b8  e35b0010          CMP      r11,#0x10
0001bc  aa000003          BGE      |L1.464|
0001c0  e28a0020          ADD      r0,r10,#0x20
0001c4  e59d102c          LDR      r1,[sp,#0x2c]
0001c8  ebfffffe          BL       OS_StrCopy
0001cc  ea000008          B        |L1.500|
                  |L1.464|
0001d0  e3a00023          MOV      r0,#0x23
0001d4  e5ca0020          STRB     r0,[r10,#0x20]
0001d8  e3a00000          MOV      r0,#0
0001dc  e5ca0021          STRB     r0,[r10,#0x21]
0001e0  e3a0008c          MOV      r0,#0x8c
0001e4  e5c90000          STRB     r0,[r9,#0]
0001e8  ebfffffe          BL       OSTmr_Unlock
0001ec  e1a0000a          MOV      r0,r10
0001f0  eaffffb5          B        |L1.204|
                  |L1.500|
0001f4  ebfffffe          BL       OSTmr_Unlock
0001f8  e3a00000          MOV      r0,#0
0001fc  e5c90000          STRB     r0,[r9,#0]
000200  e1a0000a          MOV      r0,r10
000204  eaffffb0          B        |L1.204|
                          ENDP

                  OSTmr_Free PROC
;;;773    {
;;;774        ptmr->OSTmrState       = OS_TMR_STATE_UNUSED;      /* Clear timer object fields                                   */
000208  e3a01000          MOV      r1,#0
00020c  e5c01031          STRB     r1,[r0,#0x31]
;;;775        ptmr->OSTmrOpt         = OS_TMR_OPT_NONE;
000210  e5c01030          STRB     r1,[r0,#0x30]
;;;776        ptmr->OSTmrPeriod      = 0;
000214  e580101c          STR      r1,[r0,#0x1c]
;;;777        ptmr->OSTmrMatch       = 0;
000218  e5801014          STR      r1,[r0,#0x14]
;;;778        ptmr->OSTmrCallback    = (OS_TMR_CALLBACK)0;
00021c  e5801004          STR      r1,[r0,#4]
;;;779        ptmr->OSTmrCallbackArg = (void *)0;
000220  e5801008          STR      r1,[r0,#8]
;;;780    #if OS_TMR_CFG_NAME_SIZE > 1
;;;781        ptmr->OSTmrName[0]     = '?';                      /* Unknown name                                                */
000224  e3a0103f          MOV      r1,#0x3f
000228  e5c01020          STRB     r1,[r0,#0x20]
;;;782        ptmr->OSTmrName[1]     = OS_ASCII_NUL;
00022c  e3a01000          MOV      r1,#0
000230  e5c01021          STRB     r1,[r0,#0x21]
;;;783    #endif
;;;784    
;;;785        ptmr->OSTmrPrev        = (OS_TCB *)0;              /* Chain timer to free list                                    */
000234  e5801010          STR      r1,[r0,#0x10]
;;;786        ptmr->OSTmrNext        = OSTmrFreeList;
000238  e59f1b2c          LDR      r1,|L1.3436|
00023c  e5911000          LDR      r1,[r1,#0]  ; OSTmrFreeList
000240  e580100c          STR      r1,[r0,#0xc]
;;;787        OSTmrFreeList          = ptmr;
000244  e59f1b20          LDR      r1,|L1.3436|
000248  e5810000          STR      r0,[r1,#0]  ; OSTmrFreeList
;;;788    
;;;789        OSTmrUsed--;                                       /* Update timer object statistics                              */
00024c  e59f1b1c          LDR      r1,|L1.3440|
000250  e1d110b0          LDRH     r1,[r1,#0]  ; OSTmrUsed
000254  e2411001          SUB      r1,r1,#1
000258  e59f2b10          LDR      r2,|L1.3440|
00025c  e1c210b0          STRH     r1,[r2,#0]  ; OSTmrUsed

⌨️ 快捷键说明

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