os_core.txt
来自「针对STM32F103的UCOS移植」· 文本 代码 · 共 1,356 行 · 第 1/5 页
TXT
1,356 行
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_core.o --depend=.\rvmdk\os_core.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_core.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OS_StrCopy PROC
;;;1305
;;;1306 len = 0;
000000 2200 MOVS r2,#0
;;;1307 while (*psrc != OS_ASCII_NUL) {
000002 780b LDRB r3,[r1,#0]
000004 b143 CBZ r3,|L1.24|
|L1.6|
;;;1308 *pdest++ = *psrc++;
000006 780b LDRB r3,[r1,#0]
000008 f8003b01 STRB r3,[r0],#1
;;;1309 len++;
00000c 1c52 ADDS r2,r2,#1
00000e b2d2 UXTB r2,r2
000010 f8113f01 LDRB r3,[r1,#1]! ;1307
000014 2b00 CMP r3,#0 ;1307
000016 d1f6 BNE |L1.6|
|L1.24|
;;;1310 }
;;;1311 *pdest = OS_ASCII_NUL;
000018 2100 MOVS r1,#0
00001a 7001 STRB r1,[r0,#0]
;;;1312 return (len);
00001c 4610 MOV r0,r2
;;;1313 }
00001e 4770 BX lr
;;;1314 #endif
ENDP
OSEventNameGet PROC
;;;108 INT8U OSEventNameGet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
;;;109 {
000020 e92d41f0 PUSH {r4-r8,lr}
000024 4605 MOV r5,r0
000026 460e MOV r6,r1
000028 4614 MOV r4,r2
;;;110 INT8U len;
;;;111 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;112 OS_CPU_SR cpu_sr = 0;
;;;113 #endif
;;;114
;;;115
;;;116
;;;117 #if OS_ARG_CHK_EN > 0
;;;118 if (perr == (INT8U *)0) { /* Validate 'perr' */
00002a b914 CBNZ r4,|L1.50|
;;;119 return (0);
00002c 2000 MOVS r0,#0
;;;120 }
;;;121 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
;;;122 *perr = OS_ERR_PEVENT_NULL;
;;;123 return (0);
;;;124 }
;;;125 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;126 *perr = OS_ERR_PNAME_NULL;
;;;127 return (0);
;;;128 }
;;;129 #endif
;;;130 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;131 *perr = OS_ERR_NAME_GET_ISR;
;;;132 return (0);
;;;133 }
;;;134 switch (pevent->OSEventType) {
;;;135 case OS_EVENT_TYPE_SEM:
;;;136 case OS_EVENT_TYPE_MUTEX:
;;;137 case OS_EVENT_TYPE_MBOX:
;;;138 case OS_EVENT_TYPE_Q:
;;;139 break;
;;;140
;;;141 default:
;;;142 *perr = OS_ERR_EVENT_TYPE;
;;;143 return (0);
;;;144 }
;;;145 OS_ENTER_CRITICAL();
;;;146 len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
;;;147 OS_EXIT_CRITICAL();
;;;148 *perr = OS_ERR_NONE;
;;;149 return (len);
;;;150 }
00002e e8bd81f0 POP {r4-r8,pc}
|L1.50|
000032 b925 CBNZ r5,|L1.62|
000034 2004 MOVS r0,#4 ;122
000036 7020 STRB r0,[r4,#0] ;122
000038 2000 MOVS r0,#0 ;123
00003a e8bd81f0 POP {r4-r8,pc}
|L1.62|
00003e b926 CBNZ r6,|L1.74|
000040 200c MOVS r0,#0xc ;126
000042 7020 STRB r0,[r4,#0] ;126
000044 2000 MOVS r0,#0 ;127
000046 e8bd81f0 POP {r4-r8,pc}
|L1.74|
00004a 48ff LDR r0,|L1.1096|
00004c 7880 LDRB r0,[r0,#2] ;130 ; OSIntNesting
00004e b120 CBZ r0,|L1.90|
000050 2011 MOVS r0,#0x11 ;131
000052 7020 STRB r0,[r4,#0] ;131
000054 2000 MOVS r0,#0 ;132
000056 e8bd81f0 POP {r4-r8,pc}
|L1.90|
00005a 7828 LDRB r0,[r5,#0] ;134
00005c 2801 CMP r0,#1 ;134
00005e d005 BEQ |L1.108|
000060 2802 CMP r0,#2 ;134
000062 d003 BEQ |L1.108|
000064 2803 CMP r0,#3 ;134
000066 d001 BEQ |L1.108|
000068 2804 CMP r0,#4 ;134
00006a d110 BNE |L1.142|
|L1.108|
00006c f7fffffe BL OS_CPU_SR_Save
000070 4607 MOV r7,r0 ;145
000072 f105010f ADD r1,r5,#0xf ;146
000076 4630 MOV r0,r6 ;146
000078 f7fffffe BL OS_StrCopy
00007c 4605 MOV r5,r0 ;146
00007e 4638 MOV r0,r7 ;147
000080 f7fffffe BL OS_CPU_SR_Restore
000084 2000 MOVS r0,#0 ;148
000086 7020 STRB r0,[r4,#0] ;148
000088 4628 MOV r0,r5 ;149
00008a e8bd81f0 POP {r4-r8,pc}
|L1.142|
00008e 2001 MOVS r0,#1 ;142
000090 7020 STRB r0,[r4,#0] ;142
000092 2000 MOVS r0,#0 ;143
000094 e8bd81f0 POP {r4-r8,pc}
;;;151 #endif
ENDP
OS_StrLen PROC
;;;1337
;;;1338 len = 0;
000098 2100 MOVS r1,#0
;;;1339 while (*psrc != OS_ASCII_NUL) {
00009a 7802 LDRB r2,[r0,#0]
00009c b12a CBZ r2,|L1.170|
|L1.158|
;;;1340 psrc++;
;;;1341 len++;
00009e 1c49 ADDS r1,r1,#1
0000a0 b2c9 UXTB r1,r1
0000a2 f8102f01 LDRB r2,[r0,#1]! ;1339
0000a6 2a00 CMP r2,#0 ;1339
0000a8 d1f9 BNE |L1.158|
|L1.170|
;;;1342 }
;;;1343 return (len);
0000aa 4608 MOV r0,r1
;;;1344 }
0000ac 4770 BX lr
;;;1345 #endif
ENDP
OSEventNameSet PROC
;;;182 void OSEventNameSet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
;;;183 {
0000ae e92d41f0 PUSH {r4-r8,lr}
0000b2 4605 MOV r5,r0
0000b4 460e MOV r6,r1
0000b6 4614 MOV r4,r2
;;;184 INT8U len;
;;;185 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;186 OS_CPU_SR cpu_sr = 0;
;;;187 #endif
;;;188
;;;189
;;;190
;;;191 #if OS_ARG_CHK_EN > 0
;;;192 if (perr == (INT8U *)0) { /* Validate 'perr' */
0000b8 2c00 CMP r4,#0
0000ba d002 BEQ |L1.194|
;;;193 return;
;;;194 }
;;;195 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
0000bc b91d CBNZ r5,|L1.198|
;;;196 *perr = OS_ERR_PEVENT_NULL;
0000be 2004 MOVS r0,#4
0000c0 7020 STRB r0,[r4,#0]
|L1.194|
;;;197 return;
;;;198 }
;;;199 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;200 *perr = OS_ERR_PNAME_NULL;
;;;201 return;
;;;202 }
;;;203 #endif
;;;204 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;205 *perr = OS_ERR_NAME_SET_ISR;
;;;206 return;
;;;207 }
;;;208 switch (pevent->OSEventType) {
;;;209 case OS_EVENT_TYPE_SEM:
;;;210 case OS_EVENT_TYPE_MUTEX:
;;;211 case OS_EVENT_TYPE_MBOX:
;;;212 case OS_EVENT_TYPE_Q:
;;;213 break;
;;;214
;;;215 default:
;;;216 *perr = OS_ERR_EVENT_TYPE;
;;;217 return;
;;;218 }
;;;219 OS_ENTER_CRITICAL();
;;;220 len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
;;;221 if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */
;;;222 OS_EXIT_CRITICAL();
;;;223 *perr = OS_ERR_EVENT_NAME_TOO_LONG;
;;;224 return;
;;;225 }
;;;226 (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */
;;;227 OS_EXIT_CRITICAL();
;;;228 *perr = OS_ERR_NONE;
;;;229 }
0000c2 e8bd81f0 POP {r4-r8,pc}
|L1.198|
0000c6 b91e CBNZ r6,|L1.208|
0000c8 200c MOVS r0,#0xc ;200
0000ca 7020 STRB r0,[r4,#0] ;200
0000cc e8bd81f0 POP {r4-r8,pc}
|L1.208|
0000d0 48dd LDR r0,|L1.1096|
0000d2 7880 LDRB r0,[r0,#2] ;204 ; OSIntNesting
0000d4 b118 CBZ r0,|L1.222|
0000d6 2012 MOVS r0,#0x12 ;205
0000d8 7020 STRB r0,[r4,#0] ;205
0000da e8bd81f0 POP {r4-r8,pc}
|L1.222|
0000de 7828 LDRB r0,[r5,#0] ;208
0000e0 2801 CMP r0,#1 ;208
0000e2 d005 BEQ |L1.240|
0000e4 2802 CMP r0,#2 ;208
0000e6 d003 BEQ |L1.240|
0000e8 2803 CMP r0,#3 ;208
0000ea d001 BEQ |L1.240|
0000ec 2804 CMP r0,#4 ;208
0000ee d10e BNE |L1.270|
|L1.240|
0000f0 f7fffffe BL OS_CPU_SR_Save
0000f4 4607 MOV r7,r0 ;219
0000f6 4630 MOV r0,r6 ;220
0000f8 f7fffffe BL OS_StrLen
0000fc 280f CMP r0,#0xf ;221
0000fe d90a BLS |L1.278|
000100 4638 MOV r0,r7 ;222
000102 f7fffffe BL OS_CPU_SR_Restore
000106 200b MOVS r0,#0xb ;223
000108 7020 STRB r0,[r4,#0] ;223
00010a e8bd81f0 POP {r4-r8,pc}
|L1.270|
00010e 2001 MOVS r0,#1 ;216
000110 7020 STRB r0,[r4,#0] ;216
000112 e8bd81f0 POP {r4-r8,pc}
|L1.278|
000116 4631 MOV r1,r6 ;226
000118 f105000f ADD r0,r5,#0xf ;226
00011c f7fffffe BL OS_StrCopy
000120 4638 MOV r0,r7 ;227
000122 f7fffffe BL OS_CPU_SR_Restore
000126 2000 MOVS r0,#0 ;228
000128 7020 STRB r0,[r4,#0] ;228
00012a e8bd81f0 POP {r4-r8,pc}
;;;230 #endif
ENDP
OS_TaskStatStkChk PROC
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?