os_tmr.txt
来自「针对STM32F103的UCOS移植」· 文本 代码 · 共 1,333 行 · 第 1/5 页
TXT
1,333 行
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_tmr.o --depend=.\rvmdk\os_tmr.d --device=DARMSTM --apcs=interwork -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 -IC:\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 f7ffbffe 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] ;744
000014 600a STR r2,[r1,#0] ;744 ; OSTmrFreeList
000016 2100 MOVS r1,#0 ;745
000018 60c1 STR r1,[r0,#0xc] ;745
00001a 6101 STR r1,[r0,#0x10] ;746
00001c 4af3 LDR r2,|L1.1004|
00001e 8811 LDRH r1,[r2,#0] ;747 ; OSTmrUsed
000020 1c49 ADDS r1,r1,#1 ;747
000022 8011 STRH r1,[r2,#0] ;747 ; OSTmrUsed
000024 49f2 LDR r1,|L1.1008|
000026 880a LDRH r2,[r1,#0] ;748 ; OSTmrFree
000028 1e52 SUBS r2,r2,#1 ;748
00002a 800a STRH r2,[r1,#0] ;748 ; 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 f7fffffe BL OSSemPend
;;;1051 (void)err;
;;;1052 }
00003c bd08 POP {r3,pc}
;;;1053 #endif
ENDP
OSTmrCreate PROC
;;;119 INT8U *perr)
;;;120 {
00003e e92d5ff0 PUSH {r4-r12,lr}
000042 f8dda02c LDR r10,[sp,#0x2c]
000046 f8dd9028 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
;;;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 }
000058 e8bd9ff0 POP {r4-r12,pc}
|L1.92|
00005c 2e01 CMP r6,#1 ;131
00005e d009 BEQ |L1.116|
000060 2e02 CMP r6,#2 ;131
000062 d10d BNE |L1.128|
000064 f1b80f00 CMP r8,#0 ;133
000068 d10f BNE |L1.138|
00006a 2083 MOVS r0,#0x83 ;134
00006c 7028 STRB r0,[r5,#0] ;134
00006e 2000 MOVS r0,#0 ;135
000070 e8bd9ff0 POP {r4-r12,pc}
|L1.116|
000074 b94f CBNZ r7,|L1.138|
000076 2082 MOVS r0,#0x82 ;141
000078 7028 STRB r0,[r5,#0] ;141
00007a 2000 MOVS r0,#0 ;142
00007c e8bd9ff0 POP {r4-r12,pc}
|L1.128|
000080 2084 MOVS r0,#0x84 ;147
000082 7028 STRB r0,[r5,#0] ;147
000084 2000 MOVS r0,#0 ;148
000086 e8bd9ff0 POP {r4-r12,pc}
|L1.138|
00008a 48da LDR r0,|L1.1012|
00008c 7800 LDRB r0,[r0,#0] ;151 ; OSIntNesting
00008e b120 CBZ r0,|L1.154|
000090 208b MOVS r0,#0x8b ;152
000092 7028 STRB r0,[r5,#0] ;152
000094 2000 MOVS r0,#0 ;153
000096 e8bd9ff0 POP {r4-r12,pc}
|L1.154|
00009a f7fffffe BL OSTmr_Lock
00009e f7fffffe BL OSTmr_Alloc
0000a2 4604 MOV r4,r0 ;156
0000a4 b934 CBNZ r4,|L1.180|
0000a6 f7fffffe BL OSTmr_Unlock
0000aa 2086 MOVS r0,#0x86 ;159
0000ac 7028 STRB r0,[r5,#0] ;159
0000ae 2000 MOVS r0,#0 ;160
0000b0 e8bd9ff0 POP {r4-r12,pc}
|L1.180|
0000b4 2001 MOVS r0,#1 ;162
0000b6 f8840031 STRB r0,[r4,#0x31] ;162
0000ba 61a7 STR r7,[r4,#0x18] ;163
0000bc f8c4801c STR r8,[r4,#0x1c] ;164
0000c0 f8846030 STRB r6,[r4,#0x30] ;165
0000c4 f8c4b004 STR r11,[r4,#4] ;166
0000c8 f8c49008 STR r9,[r4,#8] ;167
0000cc 2600 MOVS r6,#0 ;169
0000ce f1ba0f00 CMP r10,#0 ;169
0000d2 d009 BEQ |L1.232|
0000d4 4650 MOV r0,r10 ;170
0000d6 f7fffffe BL OS_StrLen
0000da 2810 CMP r0,#0x10 ;171
0000dc d20a BCS |L1.244|
0000de 4651 MOV r1,r10 ;172
0000e0 f1040020 ADD r0,r4,#0x20 ;172
0000e4 f7fffffe BL OS_StrCopy
|L1.232|
0000e8 f7fffffe BL OSTmr_Unlock
0000ec 702e STRB r6,[r5,#0] ;185
0000ee 4620 MOV r0,r4 ;186
0000f0 e8bd9ff0 POP {r4-r12,pc}
|L1.244|
0000f4 2023 MOVS r0,#0x23 ;175
0000f6 f8840020 STRB r0,[r4,#0x20] ;175
0000fa f8846021 STRB r6,[r4,#0x21] ;176
0000fe 208c MOVS r0,#0x8c ;178
000100 7028 STRB r0,[r5,#0] ;178
000102 f7fffffe BL OSTmr_Unlock
000106 4620 MOV r0,r4 ;180
000108 e8bd9ff0 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 f8801031 STRB r1,[r0,#0x31]
;;;770 ptmr->OSTmrOpt = OS_TMR_OPT_NONE;
000112 f8801030 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 f8802020 STRB r2,[r0,#0x20]
;;;777 ptmr->OSTmrName[1] = OS_ASCII_NUL;
000124 f8801021 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?