📄 os_tmr.txt
字号:
; 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 + -