📄 os_flag.lst
字号:
\ 000000A0 4B00008A BHI ??OSFlagAccept_7
\ 000000A4 011F8FE2 ADR R1,??OSFlagAccept_0
\ 000000A8 0010D1E7 LDRB R1,[R1, R0]
\ 000000AC 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSFlagAccept_0:
\ 000000B0 24360012 DC8 +36,+54,+0,+18
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 */
\ ??OSFlagAccept_8:
\ 000000B4 B800D4E1 LDRH R0,[R4, #+8]
\ 000000B8 000015E0 ANDS R0,R5,R0
\ 000000BC 0080B0E1 MOVS R8,R0
129 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 000000C0 0888A0E1 MOV R8,R8, LSL #+16
\ 000000C4 2888B0E1 MOVS R8,R8, LSR #+16
\ 000000C8 050058E1 CMP R8,R5
\ 000000CC 0500001A BNE ??OSFlagAccept_9
130 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 000000D0 01005AE3 CMP R10,#+1
\ 000000D4 0500001A BNE ??OSFlagAccept_10
131 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
\ 000000D8 B800D4E1 LDRH R0,[R4, #+8]
\ 000000DC 0800D0E1 BICS R0,R0,R8
\ 000000E0 B800C4E1 STRH R0,[R4, #+8]
\ 000000E4 010000EA B ??OSFlagAccept_10
132 }
133 } else {
134 *err = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_9:
\ 000000E8 7000A0E3 MOV R0,#+112
\ 000000EC 0000C7E5 STRB R0,[R7, #+0]
135 }
136 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_10:
\ 000000F0 0B00B0E1 MOVS R0,R11
\ 000000F4 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
\ 000000F8 3B0000EA B ??OSFlagAccept_11
137 break;
138
139 case OS_FLAG_WAIT_SET_ANY:
140 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
\ ??OSFlagAccept_12:
\ 000000FC B800D4E1 LDRH R0,[R4, #+8]
\ 00000100 000015E0 ANDS R0,R5,R0
\ 00000104 0080B0E1 MOVS R8,R0
141 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
\ 00000108 0888A0E1 MOV R8,R8, LSL #+16
\ 0000010C 2888B0E1 MOVS R8,R8, LSR #+16
\ 00000110 000058E3 CMP R8,#+0
\ 00000114 0500000A BEQ ??OSFlagAccept_13
142 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 00000118 01005AE3 CMP R10,#+1
\ 0000011C 0500001A BNE ??OSFlagAccept_14
143 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
\ 00000120 B800D4E1 LDRH R0,[R4, #+8]
\ 00000124 0800D0E1 BICS R0,R0,R8
\ 00000128 B800C4E1 STRH R0,[R4, #+8]
\ 0000012C 010000EA B ??OSFlagAccept_14
144 }
145 } else {
146 *err = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_13:
\ 00000130 7000A0E3 MOV R0,#+112
\ 00000134 0000C7E5 STRB R0,[R7, #+0]
147 }
148 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_14:
\ 00000138 0B00B0E1 MOVS R0,R11
\ 0000013C ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
\ 00000140 290000EA B ??OSFlagAccept_11
149 break;
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 */
\ ??OSFlagAccept_15:
\ 00000144 B800D4E1 LDRH R0,[R4, #+8]
\ 00000148 0000D5E1 BICS R0,R5,R0
\ 0000014C 0080B0E1 MOVS R8,R0
154 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 00000150 0888A0E1 MOV R8,R8, LSL #+16
\ 00000154 2888B0E1 MOVS R8,R8, LSR #+16
\ 00000158 050058E1 CMP R8,R5
\ 0000015C 0500001A BNE ??OSFlagAccept_16
155 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 00000160 01005AE3 CMP R10,#+1
\ 00000164 0500001A BNE ??OSFlagAccept_17
156 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
\ 00000168 B800D4E1 LDRH R0,[R4, #+8]
\ 0000016C 000098E1 ORRS R0,R8,R0
\ 00000170 B800C4E1 STRH R0,[R4, #+8]
\ 00000174 010000EA B ??OSFlagAccept_17
157 }
158 } else {
159 *err = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_16:
\ 00000178 7000A0E3 MOV R0,#+112
\ 0000017C 0000C7E5 STRB R0,[R7, #+0]
160 }
161 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_17:
\ 00000180 0B00B0E1 MOVS R0,R11
\ 00000184 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
\ 00000188 170000EA B ??OSFlagAccept_11
162 break;
163
164 case OS_FLAG_WAIT_CLR_ANY:
165 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
\ ??OSFlagAccept_18:
\ 0000018C B800D4E1 LDRH R0,[R4, #+8]
\ 00000190 0000D5E1 BICS R0,R5,R0
\ 00000194 0080B0E1 MOVS R8,R0
166 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
\ 00000198 0888A0E1 MOV R8,R8, LSL #+16
\ 0000019C 2888B0E1 MOVS R8,R8, LSR #+16
\ 000001A0 000058E3 CMP R8,#+0
\ 000001A4 0500000A BEQ ??OSFlagAccept_19
167 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 000001A8 01005AE3 CMP R10,#+1
\ 000001AC 0500001A BNE ??OSFlagAccept_20
168 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
\ 000001B0 B800D4E1 LDRH R0,[R4, #+8]
\ 000001B4 000098E1 ORRS R0,R8,R0
\ 000001B8 B800C4E1 STRH R0,[R4, #+8]
\ 000001BC 010000EA B ??OSFlagAccept_20
169 }
170 } else {
171 *err = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_19:
\ 000001C0 7000A0E3 MOV R0,#+112
\ 000001C4 0000C7E5 STRB R0,[R7, #+0]
172 }
173 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_20:
\ 000001C8 0B00B0E1 MOVS R0,R11
\ 000001CC ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
\ 000001D0 050000EA B ??OSFlagAccept_11
174 break;
175 #endif
176
177 default:
178 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_7:
\ 000001D4 0B00B0E1 MOVS R0,R11
\ 000001D8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
179 flags_rdy = (OS_FLAGS)0;
\ 000001DC 0000A0E3 MOV R0,#+0
\ 000001E0 0080B0E1 MOVS R8,R0
180 *err = OS_ERR_FLAG_WAIT_TYPE;
\ 000001E4 6F00A0E3 MOV R0,#+111
\ 000001E8 0000C7E5 STRB R0,[R7, #+0]
181 break;
182 }
183 return (flags_rdy);
\ ??OSFlagAccept_11:
\ 000001EC 0800B0E1 MOVS R0,R8
\ 000001F0 0008A0E1 MOV R0,R0, LSL #+16
\ 000001F4 2008B0E1 MOVS R0,R0, LSR #+16
\ ??OSFlagAccept_2:
\ 000001F8 F08FBDE8 POP {R4-R11,PC} ;; return
184 }
185 #endif
186
187 /*$PAGE*/
188 /*
189 *********************************************************************************************************
190 * CREATE AN EVENT FLAG
191 *
192 * Description: This function is called to create an event flag group.
193 *
194 * Arguments : flags Contains the initial value to store in the event flag group.
195 *
196 * err is a pointer to an error code which will be returned to your application:
197 * OS_ERR_NONE if the call was successful.
198 * OS_ERR_CREATE_ISR if you attempted to create an Event Flag from an
199 * ISR.
200 * OS_ERR_FLAG_GRP_DEPLETED if there are no more event flag groups
201 *
202 * Returns : A pointer to an event flag group or a NULL pointer if no more groups are available.
203 *
204 * Called from: Task ONLY
205 *********************************************************************************************************
206 */
207
\ In segment CODE, align 4, keep-with-next
208 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *err)
209 {
\ OSFlagCreate:
\ 00000000 F0402DE9 PUSH {R4-R7,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS 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;
\ 0000000C 0000A0E3 MOV R0,#+0
\ 00000010 0070B0E1 MOVS R7,R0
213 #endif
214
215
216
217 #if OS_ARG_CHK_EN > 0
218 if (err == (INT8U *)0) { /* Validate 'err' */
\ 00000014 000055E3 CMP R5,#+0
\ 00000018 0100001A BNE ??OSFlagCreate_0
219 return ((OS_FLAG_GRP *)0);
\ 0000001C 0000A0E3 MOV R0,#+0
\ 00000020 260000EA B ??OSFlagCreate_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -