📄 os_tmr.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_tmr.o --depend=.\rvmdk\os_tmr.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uCOS-II\Source\os_tmr.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSTmr_Unlock PROC
;;;1059 {
;;;1060 (void)OSSemPost(OSTmrSem);
000000 48f8 LDR r0,|L1.996|
000002 6800 LDR r0,[r0,#0] ; OSTmrSem
000004 f7fff7ff B.W OSSemPost
;;;1061 }
;;;1062 #endif
ENDP
OSTmr_Alloc PROC
;;;739
;;;740 if (OSTmrFreeList == (OS_TMR *)0) {
000008 49f7 LDR r1,|L1.1000|
00000a 6808 LDR r0,[r1,#0] ; OSTmrFreeList
00000c b908 CBNZ r0,|L1.18|
;;;741 return ((OS_TMR *)0);
00000e 2000 MOVS r0,#0
;;;742 }
;;;743 ptmr = (OS_TMR *)OSTmrFreeList;
;;;744 OSTmrFreeList = (OS_TMR *)ptmr->OSTmrNext;
;;;745 ptmr->OSTmrNext = (OS_TCB *)0;
;;;746 ptmr->OSTmrPrev = (OS_TCB *)0;
;;;747 OSTmrUsed++;
;;;748 OSTmrFree--;
;;;749 return (ptmr);
;;;750 }
000010 4770 BX lr
|L1.18|
000012 68c2 LDR r2,[r0,#0xc]
000014 600a STR r2,[r1,#0] ; OSTmrFreeList
000016 2100 MOVS r1,#0
000018 60c1 STR r1,[r0,#0xc]
00001a 6101 STR r1,[r0,#0x10]
00001c 4af3 LDR r2,|L1.1004|
00001e 8811 LDRH r1,[r2,#0] ; OSTmrUsed
000020 1c49 ADDS r1,r1,#1
000022 8011 STRH r1,[r2,#0] ; OSTmrUsed
000024 49f2 LDR r1,|L1.1008|
000026 880a LDRH r2,[r1,#0] ; OSTmrFree
000028 1e52 SUBS r2,r2,#1
00002a 800a STRH r2,[r1,#0] ; OSTmrFree
00002c 4770 BX lr
;;;751 #endif
ENDP
OSTmr_Lock PROC
;;;1045 static void OSTmr_Lock (void)
;;;1046 {
00002e b508 PUSH {r3,lr}
;;;1047 INT8U err;
;;;1048
;;;1049
;;;1050 OSSemPend(OSTmrSem, 0, &err);
000030 48ec LDR r0,|L1.996|
000032 466a MOV r2,sp
000034 2100 MOVS r1,#0
000036 6800 LDR r0,[r0,#0] ; OSTmrSem
000038 f7fff7ff BL OSSemPend
;;;1051 (void)err;
;;;1052 }
00003c bd08 POP {r3,pc}
;;;1053 #endif
ENDP
OSTmrCreate PROC
;;;119 INT8U *perr)
;;;120 {
00003e e92de92d PUSH {r4-r12,lr}
000042 f8ddf8dd LDR r10,[sp,#0x2c]
000046 f8ddf8dd LDR r9,[sp,#0x28]
00004a 9d0c LDR r5,[sp,#0x30]
00004c 4607 MOV r7,r0
00004e 4688 MOV r8,r1
000050 4616 MOV r6,r2
000052 469b MOV r11,r3
;;;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 */
000054 b915 CBNZ r5,|L1.92|
;;;129 return ((OS_TMR *)0);
000056 2000 MOVS r0,#0
000058 e8bde8bd POP {r4-r12,pc}
|L1.92|
;;;130 }
;;;131 switch (opt) {
00005c 2e01 CMP r6,#1
00005e d009 BEQ |L1.116|
000060 2e02 CMP r6,#2
000062 d10d BNE |L1.128|
;;;132 case OS_TMR_OPT_PERIODIC:
;;;133 if (period == 0) {
000064 f1b8f1b8 CMP r8,#0
000068 d10f BNE |L1.138|
;;;134 *perr = OS_ERR_TMR_INVALID_PERIOD;
00006a 2083 MOVS r0,#0x83
00006c 7028 STRB r0,[r5,#0]
;;;135 return ((OS_TMR *)0);
00006e 2000 MOVS r0,#0
000070 e8bde8bd POP {r4-r12,pc}
|L1.116|
;;;136 }
;;;137 break;
;;;138
;;;139 case OS_TMR_OPT_ONE_SHOT:
;;;140 if (dly == 0) {
000074 b94f CBNZ r7,|L1.138|
;;;141 *perr = OS_ERR_TMR_INVALID_DLY;
000076 2082 MOVS r0,#0x82
000078 7028 STRB r0,[r5,#0]
;;;142 return ((OS_TMR *)0);
00007a 2000 MOVS r0,#0
00007c e8bde8bd POP {r4-r12,pc}
|L1.128|
;;;143 }
;;;144 break;
;;;145
;;;146 default:
;;;147 *perr = OS_ERR_TMR_INVALID_OPT;
000080 2084 MOVS r0,#0x84
000082 7028 STRB r0,[r5,#0]
;;;148 return ((OS_TMR *)0);
000084 2000 MOVS r0,#0
000086 e8bde8bd POP {r4-r12,pc}
|L1.138|
;;;149 }
;;;150 #endif
;;;151 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
00008a 48da LDR r0,|L1.1012|
00008c 7800 LDRB r0,[r0,#0] ; OSIntNesting
00008e b120 CBZ r0,|L1.154|
;;;152 *perr = OS_ERR_TMR_ISR;
000090 208b MOVS r0,#0x8b
000092 7028 STRB r0,[r5,#0]
;;;153 return ((OS_TMR *)0);
000094 2000 MOVS r0,#0
000096 e8bde8bd POP {r4-r12,pc}
|L1.154|
;;;154 }
;;;155 OSTmr_Lock();
00009a f7fff7ff BL OSTmr_Lock
;;;156 ptmr = OSTmr_Alloc(); /* Obtain a timer from the free pool */
00009e f7fff7ff BL OSTmr_Alloc
0000a2 4604 MOV r4,r0
;;;157 if (ptmr == (OS_TMR *)0) {
0000a4 b934 CBNZ r4,|L1.180|
;;;158 OSTmr_Unlock();
0000a6 f7fff7ff BL OSTmr_Unlock
;;;159 *perr = OS_ERR_TMR_NON_AVAIL;
0000aa 2086 MOVS r0,#0x86
0000ac 7028 STRB r0,[r5,#0]
;;;160 return ((OS_TMR *)0);
0000ae 2000 MOVS r0,#0
0000b0 e8bde8bd POP {r4-r12,pc}
|L1.180|
;;;161 }
;;;162 ptmr->OSTmrState = OS_TMR_STATE_STOPPED; /* Indicate that timer is not running yet */
0000b4 2001 MOVS r0,#1
0000b6 f884f884 STRB r0,[r4,#0x31]
;;;163 ptmr->OSTmrDly = dly;
0000ba 61a7 STR r7,[r4,#0x18]
;;;164 ptmr->OSTmrPeriod = period;
0000bc f8c4f8c4 STR r8,[r4,#0x1c]
;;;165 ptmr->OSTmrOpt = opt;
0000c0 f884f884 STRB r6,[r4,#0x30]
;;;166 ptmr->OSTmrCallback = callback;
0000c4 f8c4f8c4 STR r11,[r4,#4]
;;;167 ptmr->OSTmrCallbackArg = callback_arg;
0000c8 f8c4f8c4 STR r9,[r4,#8]
;;;168 #if OS_TMR_CFG_NAME_SIZE > 0
;;;169 if (pname !=(INT8U *)0) {
0000cc 2600 MOVS r6,#0
0000ce f1baf1ba CMP r10,#0
0000d2 d009 BEQ |L1.232|
;;;170 len = OS_StrLen(pname); /* Copy timer name */
0000d4 4650 MOV r0,r10
0000d6 f7fff7ff BL OS_StrLen
;;;171 if (len < OS_TMR_CFG_NAME_SIZE) {
0000da 2810 CMP r0,#0x10
0000dc d20a BCS |L1.244|
;;;172 (void)OS_StrCopy(ptmr->OSTmrName, pname);
0000de 4651 MOV r1,r10
0000e0 f104f104 ADD r0,r4,#0x20
0000e4 f7fff7ff BL OS_StrCopy
|L1.232|
;;;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();
0000e8 f7fff7ff BL OSTmr_Unlock
;;;185 *perr = OS_ERR_NONE;
0000ec 702e STRB r6,[r5,#0]
;;;186 return (ptmr);
0000ee 4620 MOV r0,r4
0000f0 e8bde8bd POP {r4-r12,pc}
|L1.244|
0000f4 2023 MOVS r0,#0x23
0000f6 f884f884 STRB r0,[r4,#0x20]
0000fa f884f884 STRB r6,[r4,#0x21]
0000fe 208c MOVS r0,#0x8c
000100 7028 STRB r0,[r5,#0]
000102 f7fff7ff BL OSTmr_Unlock
000106 4620 MOV r0,r4
;;;187 }
000108 e8bde8bd POP {r4-r12,pc}
;;;188 #endif
ENDP
OSTmr_Free PROC
;;;768 {
;;;769 ptmr->OSTmrState = OS_TMR_STATE_UNUSED; /* Clear timer object fields */
00010c 2100 MOVS r1,#0
00010e f880f880 STRB r1,[r0,#0x31]
;;;770 ptmr->OSTmrOpt = OS_TMR_OPT_NONE;
000112 f880f880 STRB r1,[r0,#0x30]
;;;771 ptmr->OSTmrPeriod = 0;
000116 61c1 STR r1,[r0,#0x1c]
;;;772 ptmr->OSTmrMatch = 0;
000118 6141 STR r1,[r0,#0x14]
;;;773 ptmr->OSTmrCallback = (OS_TMR_CALLBACK)0;
00011a 6041 STR r1,[r0,#4]
;;;774 ptmr->OSTmrCallbackArg = (void *)0;
00011c 6081 STR r1,[r0,#8]
;;;775 #if OS_TMR_CFG_NAME_SIZE > 1
;;;776 ptmr->OSTmrName[0] = '?'; /* Unknown name */
00011e 223f MOVS r2,#0x3f
000120 f880f880 STRB r2,[r0,#0x20]
;;;777 ptmr->OSTmrName[1] = OS_ASCII_NUL;
000124 f880f880 STRB r1,[r0,#0x21]
;;;778 #endif
;;;779
;;;780 ptmr->OSTmrPrev = (OS_TCB *)0; /* Chain timer to free list */
000128 6101 STR r1,[r0,#0x10]
;;;781 ptmr->OSTmrNext = OSTmrFreeList;
00012a 49af LDR r1,|L1.1000|
00012c 680a LDR r2,[r1,#0] ; OSTmrFreeList
00012e 60c2 STR r2,[r0,#0xc]
;;;782 OSTmrFreeList = ptmr;
000130 6008 STR r0,[r1,#0] ; OSTmrFreeList
;;;783
;;;784 OSTmrUsed--; /* Update timer object statistics */
000132 48ae LDR r0,|L1.1004|
000134 8801 LDRH r1,[r0,#0] ; OSTmrUsed
000136 1e49 SUBS r1,r1,#1
000138 8001 STRH r1,[r0,#0] ; OSTmrUsed
;;;785 OSTmrFree++;
00013a 48ad LDR r0,|L1.1008|
00013c 8801 LDRH r1,[r0,#0] ; OSTmrFree
00013e 1c49 ADDS r1,r1,#1
000140 8001 STRH r1,[r0,#0] ; OSTmrFree
;;;786 }
000142 4770 BX lr
;;;787 #endif
ENDP
OSTmr_Unlink PROC
;;;1006
;;;1007 spoke = (INT16U)(ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE);
000144 6941 LDR r1,[r0,#0x14]
000146 f001f001 AND r1,r1,#7
;;;1008 pspoke = &OSTmrWheelTbl[spoke];
00014a 4aab LDR r2,|L1.1016|
00014c eb02eb02 ADD r1,r2,r1,LSL #3
;;;1009
;;;1010 if (pspoke->OSTmrFirst == ptmr) { /* See if timer to remove is at the beginning of list */
000150 680b LDR r3,[r1,#0]
000152 68c2 LDR r2,[r0,#0xc]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -