📄 os_flag.lst
字号:
\ 00000048 002E CMP R6,#+0
\ 0000004A 35D0 BEQ.N ??OSFlagAccept_4
\ 0000004C 022E CMP R6,#+2
\ 0000004E 03D0 BEQ.N ??OSFlagAccept_5
\ 00000050 4BD3 BCC.N ??OSFlagAccept_6
\ 00000052 032E CMP R6,#+3
\ 00000054 18D0 BEQ.N ??OSFlagAccept_7
\ 00000056 61E0 B.N ??OSFlagAccept_8
134 case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
135 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
\ ??OSFlagAccept_5:
\ 00000058 2089 LDRH R0,[R4, #+8]
\ 0000005A 2840 ANDS R0,R5,R0
\ 0000005C 8046 MOV R8,R0
136 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 0000005E 1FFA88F8 UXTH R8,R8 ;; ZeroExt R8,R8,#+16,#+16
\ 00000062 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000064 A845 CMP R8,R5
\ 00000066 09D1 BNE.N ??OSFlagAccept_9
137 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 00000068 5FFA8AFA UXTB R10,R10 ;; ZeroExt R10,R10,#+24,#+24
\ 0000006C BAF1010F CMP R10,#+1
\ 00000070 06D1 BNE.N ??OSFlagAccept_10
138 pgrp->OSFlagFlags &= (OS_FLAGS)~flags_rdy; /* Clear ONLY the flags we wanted */
\ 00000072 2089 LDRH R0,[R4, #+8]
\ 00000074 30EA0800 BICS R0,R0,R8
\ 00000078 2081 STRH R0,[R4, #+8]
\ 0000007A 01E0 B.N ??OSFlagAccept_10
139 }
140 } else {
141 *perr = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_9:
\ 0000007C 7020 MOVS R0,#+112
\ 0000007E 3870 STRB R0,[R7, #+0]
142 }
143 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_10:
\ 00000080 5846 MOV R0,R11
\ 00000082 ........ BL OS_CPU_SR_Restore
144 break;
\ 00000086 50E0 B.N ??OSFlagAccept_11
145
146 case OS_FLAG_WAIT_SET_ANY:
147 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
\ ??OSFlagAccept_7:
\ 00000088 2089 LDRH R0,[R4, #+8]
\ 0000008A 2840 ANDS R0,R5,R0
\ 0000008C 8046 MOV R8,R0
148 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
\ 0000008E 1FFA88F8 UXTH R8,R8 ;; ZeroExt R8,R8,#+16,#+16
\ 00000092 B8F1000F CMP R8,#+0
\ 00000096 09D0 BEQ.N ??OSFlagAccept_12
149 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 00000098 5FFA8AFA UXTB R10,R10 ;; ZeroExt R10,R10,#+24,#+24
\ 0000009C BAF1010F CMP R10,#+1
\ 000000A0 06D1 BNE.N ??OSFlagAccept_13
150 pgrp->OSFlagFlags &= (OS_FLAGS)~flags_rdy; /* Clear ONLY the flags we got */
\ 000000A2 2089 LDRH R0,[R4, #+8]
\ 000000A4 30EA0800 BICS R0,R0,R8
\ 000000A8 2081 STRH R0,[R4, #+8]
\ 000000AA 01E0 B.N ??OSFlagAccept_13
151 }
152 } else {
153 *perr = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_12:
\ 000000AC 7020 MOVS R0,#+112
\ 000000AE 3870 STRB R0,[R7, #+0]
154 }
155 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_13:
\ 000000B0 5846 MOV R0,R11
\ 000000B2 ........ BL OS_CPU_SR_Restore
156 break;
\ 000000B6 38E0 B.N ??OSFlagAccept_11
157
158 #if OS_FLAG_WAIT_CLR_EN > 0u
159 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
160 flags_rdy = (OS_FLAGS)~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_4:
\ 000000B8 2089 LDRH R0,[R4, #+8]
\ 000000BA 35EA0000 BICS R0,R5,R0
\ 000000BE 8046 MOV R8,R0
161 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 000000C0 1FFA88F8 UXTH R8,R8 ;; ZeroExt R8,R8,#+16,#+16
\ 000000C4 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 000000C6 A845 CMP R8,R5
\ 000000C8 09D1 BNE.N ??OSFlagAccept_14
162 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 000000CA 5FFA8AFA UXTB R10,R10 ;; ZeroExt R10,R10,#+24,#+24
\ 000000CE BAF1010F CMP R10,#+1
\ 000000D2 06D1 BNE.N ??OSFlagAccept_15
163 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
\ 000000D4 2089 LDRH R0,[R4, #+8]
\ 000000D6 58EA0000 ORRS R0,R8,R0
\ 000000DA 2081 STRH R0,[R4, #+8]
\ 000000DC 01E0 B.N ??OSFlagAccept_15
164 }
165 } else {
166 *perr = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_14:
\ 000000DE 7020 MOVS R0,#+112
\ 000000E0 3870 STRB R0,[R7, #+0]
167 }
168 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_15:
\ 000000E2 5846 MOV R0,R11
\ 000000E4 ........ BL OS_CPU_SR_Restore
169 break;
\ 000000E8 1FE0 B.N ??OSFlagAccept_11
170
171 case OS_FLAG_WAIT_CLR_ANY:
172 flags_rdy = (OS_FLAGS)~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_6:
\ 000000EA 2089 LDRH R0,[R4, #+8]
\ 000000EC 35EA0000 BICS R0,R5,R0
\ 000000F0 8046 MOV R8,R0
173 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
\ 000000F2 1FFA88F8 UXTH R8,R8 ;; ZeroExt R8,R8,#+16,#+16
\ 000000F6 B8F1000F CMP R8,#+0
\ 000000FA 09D0 BEQ.N ??OSFlagAccept_16
174 if (consume == OS_TRUE) { /* See if we need to consume the flags */
\ 000000FC 5FFA8AFA UXTB R10,R10 ;; ZeroExt R10,R10,#+24,#+24
\ 00000100 BAF1010F CMP R10,#+1
\ 00000104 06D1 BNE.N ??OSFlagAccept_17
175 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
\ 00000106 2089 LDRH R0,[R4, #+8]
\ 00000108 58EA0000 ORRS R0,R8,R0
\ 0000010C 2081 STRH R0,[R4, #+8]
\ 0000010E 01E0 B.N ??OSFlagAccept_17
176 }
177 } else {
178 *perr = OS_ERR_FLAG_NOT_RDY;
\ ??OSFlagAccept_16:
\ 00000110 7020 MOVS R0,#+112
\ 00000112 3870 STRB R0,[R7, #+0]
179 }
180 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_17:
\ 00000114 5846 MOV R0,R11
\ 00000116 ........ BL OS_CPU_SR_Restore
181 break;
\ 0000011A 06E0 B.N ??OSFlagAccept_11
182 #endif
183
184 default:
185 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_8:
\ 0000011C 5846 MOV R0,R11
\ 0000011E ........ BL OS_CPU_SR_Restore
186 flags_rdy = (OS_FLAGS)0;
\ 00000122 0020 MOVS R0,#+0
\ 00000124 8046 MOV R8,R0
187 *perr = OS_ERR_FLAG_WAIT_TYPE;
\ 00000126 6F20 MOVS R0,#+111
\ 00000128 3870 STRB R0,[R7, #+0]
188 break;
189 }
190 return (flags_rdy);
\ ??OSFlagAccept_11:
\ 0000012A 4046 MOV R0,R8
\ 0000012C 80B2 UXTH R0,R0 ;; ZeroExt R0,R0,#+16,#+16
\ ??OSFlagAccept_1:
\ 0000012E BDE8F28F POP {R1,R4-R11,PC} ;; return
191 }
192 #endif
193
194 /*$PAGE*/
195 /*
196 *********************************************************************************************************
197 * CREATE AN EVENT FLAG
198 *
199 * Description: This function is called to create an event flag group.
200 *
201 * Arguments : flags Contains the initial value to store in the event flag group.
202 *
203 * perr is a pointer to an error code which will be returned to your application:
204 * OS_ERR_NONE if the call was successful.
205 * OS_ERR_CREATE_ISR if you attempted to create an Event Flag from an
206 * ISR.
207 * OS_ERR_FLAG_GRP_DEPLETED if there are no more event flag groups
208 *
209 * Returns : A pointer to an event flag group or a NULL pointer if no more groups are available.
210 *
211 * Called from: Task ONLY
212 *********************************************************************************************************
213 */
214
\ In section .text, align 2, keep-with-next
215 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags,
216 INT8U *perr)
217 {
\ OSFlagCreate:
\ 00000000 F8B5 PUSH {R3-R7,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
218 OS_FLAG_GRP *pgrp;
219 #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
220 OS_CPU_SR cpu_sr = 0u;
\ 00000006 0027 MOVS R7,#+0
221 #endif
222
223
224
225 #ifdef OS_SAFETY_CRITICAL
226 if (perr == (INT8U *)0) {
227 OS_SAFETY_CRITICAL_EXCEPTION();
228 return ((OS_FLAG_GRP *)0);
229 }
230 #endif
231
232 #ifdef OS_SAFETY_CRITICAL_IEC61508
233 if (OSSafetyCriticalStartFlag == OS_TRUE) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -