?? os_flag.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_flag.o --depend=.\rvmdk\os_flag.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_flag.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSFlagAccept PROC
;;;92 OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr)
;;;93 {
000000 e92de92d PUSH {r4-r8,lr}
000004 4605 MOV r5,r0
000006 460f MOV r7,r1
000008 4614 MOV r4,r2
00000a 461e MOV r6,r3
;;;94 OS_FLAGS flags_rdy;
;;;95 INT8U result;
;;;96 BOOLEAN consume;
;;;97 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;98 OS_CPU_SR cpu_sr = 0;
;;;99 #endif
;;;100
;;;101
;;;102
;;;103 #if OS_ARG_CHK_EN > 0
;;;104 if (perr == (INT8U *)0) { /* Validate 'perr' */
00000c b916 CBNZ r6,|L1.20|
;;;105 return ((OS_FLAGS)0);
00000e 2000 MOVS r0,#0
000010 e8bde8bd POP {r4-r8,pc}
|L1.20|
;;;106 }
;;;107 if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
000014 b925 CBNZ r5,|L1.32|
;;;108 *perr = OS_ERR_FLAG_INVALID_PGRP;
000016 206e MOVS r0,#0x6e
000018 7030 STRB r0,[r6,#0]
;;;109 return ((OS_FLAGS)0);
00001a 2000 MOVS r0,#0
00001c e8bde8bd POP {r4-r8,pc}
|L1.32|
;;;110 }
;;;111 #endif
;;;112 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
000020 7828 LDRB r0,[r5,#0]
000022 2805 CMP r0,#5
000024 d004 BEQ |L1.48|
;;;113 *perr = OS_ERR_EVENT_TYPE;
000026 2001 MOVS r0,#1
000028 7030 STRB r0,[r6,#0]
;;;114 return ((OS_FLAGS)0);
00002a 2000 MOVS r0,#0
00002c e8bde8bd POP {r4-r8,pc}
|L1.48|
;;;115 }
;;;116 result = (INT8U)(wait_type & OS_FLAG_CONSUME);
000030 f004f004 AND r0,r4,#0x80
;;;117 if (result != (INT8U)0) { /* See if we need to consume the flags */
000034 b120 CBZ r0,|L1.64|
;;;118 wait_type &= ~OS_FLAG_CONSUME;
000036 f024f024 BIC r4,r4,#0x80
;;;119 consume = OS_TRUE;
00003a f04ff04f MOV r8,#1
00003e e001 B |L1.68|
|L1.64|
;;;120 } else {
;;;121 consume = OS_FALSE;
000040 f04ff04f MOV r8,#0
|L1.68|
;;;122 }
;;;123 /*$PAGE*/
;;;124 *perr = OS_ERR_NONE; /* Assume NO error until proven otherwise. */
000044 2000 MOVS r0,#0
000046 7030 STRB r0,[r6,#0]
;;;125 OS_ENTER_CRITICAL();
000048 f7fff7ff BL OS_CPU_SR_Save
;;;126 switch (wait_type) {
00004c 2270 MOVS r2,#0x70
00004e b314 CBZ r4,|L1.150|
000050 2c01 CMP r4,#1
000052 d02f BEQ |L1.180|
000054 2c02 CMP r4,#2
000056 d00b BEQ |L1.112|
000058 2c03 CMP r4,#3
00005a d139 BNE |L1.208|
;;;127 case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
;;;128 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
;;;129 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
;;;130 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;131 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
;;;132 }
;;;133 } else {
;;;134 *perr = OS_ERR_FLAG_NOT_RDY;
;;;135 }
;;;136 OS_EXIT_CRITICAL();
;;;137 break;
;;;138
;;;139 case OS_FLAG_WAIT_SET_ANY:
;;;140 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
00005c 8929 LDRH r1,[r5,#8]
00005e ea01ea01 AND r4,r1,r7
;;;141 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
000062 b1a4 CBZ r4,|L1.142|
000064 f1b8f1b8 CMP r8,#1
;;;142 if (consume == OS_TRUE) { /* See if we need to consume the flags */
000068 d112 BNE |L1.144|
00006a 43a1 BICS r1,r1,r4
00006c 8129 STRH r1,[r5,#8]
;;;143 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
00006e e00f B |L1.144|
|L1.112|
000070 8929 LDRH r1,[r5,#8]
000072 ea01ea01 AND r4,r1,r7
000076 42bc CMP r4,r7
000078 d105 BNE |L1.134|
00007a f1b8f1b8 CMP r8,#1
00007e d103 BNE |L1.136|
000080 43a1 BICS r1,r1,r4
000082 8129 STRH r1,[r5,#8]
000084 e000 B |L1.136|
|L1.134|
000086 7032 STRB r2,[r6,#0]
|L1.136|
000088 f7fff7ff BL OS_CPU_SR_Restore
00008c e025 B |L1.218|
|L1.142|
;;;144 }
;;;145 } else {
;;;146 *perr = OS_ERR_FLAG_NOT_RDY;
00008e 7032 STRB r2,[r6,#0]
|L1.144|
;;;147 }
;;;148 OS_EXIT_CRITICAL();
000090 f7fff7ff BL OS_CPU_SR_Restore
;;;149 break;
000094 e021 B |L1.218|
|L1.150|
;;;150
;;;151 #if OS_FLAG_WAIT_CLR_EN > 0
;;;152 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
;;;153 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
000096 8929 LDRH r1,[r5,#8]
000098 ea27ea27 BIC r4,r7,r1
;;;154 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
00009c 42bc CMP r4,r7
00009e d105 BNE |L1.172|
;;;155 if (consume == OS_TRUE) { /* See if we need to consume the flags */
0000a0 f1b8f1b8 CMP r8,#1
0000a4 d103 BNE |L1.174|
;;;156 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
0000a6 4321 ORRS r1,r1,r4
0000a8 8129 STRH r1,[r5,#8]
0000aa e000 B |L1.174|
|L1.172|
;;;157 }
;;;158 } else {
;;;159 *perr = OS_ERR_FLAG_NOT_RDY;
0000ac 7032 STRB r2,[r6,#0]
|L1.174|
;;;160 }
;;;161 OS_EXIT_CRITICAL();
0000ae f7fff7ff BL OS_CPU_SR_Restore
;;;162 break;
0000b2 e012 B |L1.218|
|L1.180|
;;;163
;;;164 case OS_FLAG_WAIT_CLR_ANY:
;;;165 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
0000b4 8929 LDRH r1,[r5,#8]
0000b6 ea27ea27 BIC r4,r7,r1
;;;166 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
0000ba b12c CBZ r4,|L1.200|
;;;167 if (consume == OS_TRUE) { /* See if we need to consume the flags */
0000bc f1b8f1b8 CMP r8,#1
0000c0 d103 BNE |L1.202|
;;;168 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
0000c2 4321 ORRS r1,r1,r4
0000c4 8129 STRH r1,[r5,#8]
0000c6 e000 B |L1.202|
|L1.200|
;;;169 }
;;;170 } else {
;;;171 *perr = OS_ERR_FLAG_NOT_RDY;
0000c8 7032 STRB r2,[r6,#0]
|L1.202|
;;;172 }
;;;173 OS_EXIT_CRITICAL();
0000ca f7fff7ff BL OS_CPU_SR_Restore
;;;174 break;
0000ce e004 B |L1.218|
|L1.208|
;;;175 #endif
;;;176
;;;177 default:
;;;178 OS_EXIT_CRITICAL();
0000d0 f7fff7ff BL OS_CPU_SR_Restore
;;;179 flags_rdy = (OS_FLAGS)0;
0000d4 2400 MOVS r4,#0
;;;180 *perr = OS_ERR_FLAG_WAIT_TYPE;
0000d6 206f MOVS r0,#0x6f
0000d8 7030 STRB r0,[r6,#0]
|L1.218|
;;;181 break;
;;;182 }
;;;183 return (flags_rdy);
0000da 4620 MOV r0,r4
;;;184 }
0000dc e8bde8bd POP {r4-r8,pc}
;;;185 #endif
ENDP
OSFlagCreate PROC
;;;208 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
;;;209 {
0000e0 b570 PUSH {r4-r6,lr}
0000e2 4606 MOV r6,r0
0000e4 460d MOV r5,r1
;;;210 OS_FLAG_GRP *pgrp;
;;;211 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;212 OS_CPU_SR cpu_sr = 0;
;;;213 #endif
;;;214
;;;215
;;;216
;;;217 #if OS_ARG_CHK_EN > 0
;;;218 if (perr == (INT8U *)0) { /* Validate 'perr' */
0000e6 b90d CBNZ r5,|L1.236|
;;;219 return ((OS_FLAG_GRP *)0);
0000e8 2000 MOVS r0,#0
;;;220 }
;;;221 #endif
;;;222 if (OSIntNesting > 0) { /* See if called from ISR ... */
;;;223 *perr = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
;;;224 return ((OS_FLAG_GRP *)0);
;;;225 }
;;;226 OS_ENTER_CRITICAL();
;;;227 pgrp = OSFlagFreeList; /* Get next free event flag */
;;;228 if (pgrp != (OS_FLAG_GRP *)0) { /* See if we have event flag groups available */
;;;229 /* Adjust free list */
;;;230 OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
;;;231 pgrp->OSFlagType = OS_EVENT_TYPE_FLAG; /* Set to event flag group type */
;;;232 pgrp->OSFlagFlags = flags; /* Set to desired initial value */
;;;233 pgrp->OSFlagWaitList = (void *)0; /* Clear list of tasks waiting on flags */
;;;234 #if OS_FLAG_NAME_SIZE > 1
;;;235 pgrp->OSFlagName[0] = '?';
;;;236 pgrp->OSFlagName[1] = OS_ASCII_NUL;
;;;237 #endif
;;;238 OS_EXIT_CRITICAL();
;;;239 *perr = OS_ERR_NONE;
;;;240 } else {
;;;241 OS_EXIT_CRITICAL();
;;;242 *perr = OS_ERR_FLAG_GRP_DEPLETED;
;;;243 }
;;;244 return (pgrp); /* Return pointer to event flag group */
;;;245 }
0000ea bd70 POP {r4-r6,pc}
|L1.236|
0000ec 48f9 LDR r0,|L1.1236|
0000ee 7800 LDRB r0,[r0,#0] ; OSIntNesting
0000f0 b118 CBZ r0,|L1.250|
0000f2 2010 MOVS r0,#0x10
0000f4 7028 STRB r0,[r5,#0]
0000f6 2000 MOVS r0,#0
0000f8 bd70 POP {r4-r6,pc}
|L1.250|
0000fa f7fff7ff BL OS_CPU_SR_Save
0000fe 49f6 LDR r1,|L1.1240|
000100 680c LDR r4,[r1,#0] ; OSFlagFreeList
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -