📄 os_flag.lst
字号:
\ 00000062 2189 LDRH R1,[R4, #+8]
\ 00000064 B943 BICS R1,R1,R7
\ 00000066 2181 STRH R1,[R4, #+8]
\ 00000068 01E0 B ??OSFlagAccept_11
117 }
118 } else {
119 *err = OS_FLAG_ERR_NOT_RDY;
\ ??OSFlagAccept_10:
\ 0000006A 9821 MOVS R1,#+152
\ 0000006C 2970 STRB R1,[R5, #+0]
120 }
121 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_11:
\ 0000006E ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 00000072 3FE0 B ??OSFlagAccept_12
122 break;
123
124 case OS_FLAG_WAIT_SET_ANY:
125 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_8:
\ 00000074 2189 LDRH R1,[R4, #+8]
\ 00000076 6A46 MOV R2,SP
\ 00000078 1788 LDRH R7,[R2, #+0]
\ 0000007A 0F40 ANDS R7,R7,R1
126 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
\ 0000007C 3F04 LSLS R7,R7,#+16 ;; ZeroExtS R7,R7,#+16,#+16
\ 0000007E 3F0C LSRS R7,R7,#+16
\ 00000080 002F CMP R7,#+0
\ 00000082 05D0 BEQ ??OSFlagAccept_13
127 if (consume == TRUE) { /* See if we need to consume the flags */
\ 00000084 012E CMP R6,#+1
\ 00000086 05D1 BNE ??OSFlagAccept_14
128 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
\ 00000088 2189 LDRH R1,[R4, #+8]
\ 0000008A B943 BICS R1,R1,R7
\ 0000008C 2181 STRH R1,[R4, #+8]
\ 0000008E 01E0 B ??OSFlagAccept_14
129 }
130 } else {
131 *err = OS_FLAG_ERR_NOT_RDY;
\ ??OSFlagAccept_13:
\ 00000090 9821 MOVS R1,#+152
\ 00000092 2970 STRB R1,[R5, #+0]
132 }
133 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_14:
\ 00000094 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 00000098 2CE0 B ??OSFlagAccept_12
134 break;
135
136 #if OS_FLAG_WAIT_CLR_EN > 0
137 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
138 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_5:
\ 0000009A 2189 LDRH R1,[R4, #+8]
\ 0000009C 6A46 MOV R2,SP
\ 0000009E 1788 LDRH R7,[R2, #+0]
\ 000000A0 8F43 BICS R7,R7,R1
139 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 000000A2 6946 MOV R1,SP
\ 000000A4 0988 LDRH R1,[R1, #+0]
\ 000000A6 3F04 LSLS R7,R7,#+16 ;; ZeroExtS R7,R7,#+16,#+16
\ 000000A8 3F0C LSRS R7,R7,#+16
\ 000000AA 8F42 CMP R7,R1
\ 000000AC 05D1 BNE ??OSFlagAccept_15
140 if (consume == TRUE) { /* See if we need to consume the flags */
\ 000000AE 012E CMP R6,#+1
\ 000000B0 05D1 BNE ??OSFlagAccept_16
141 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
\ 000000B2 2189 LDRH R1,[R4, #+8]
\ 000000B4 3943 ORRS R1,R1,R7
\ 000000B6 2181 STRH R1,[R4, #+8]
\ 000000B8 01E0 B ??OSFlagAccept_16
142 }
143 } else {
144 *err = OS_FLAG_ERR_NOT_RDY;
\ ??OSFlagAccept_15:
\ 000000BA 9821 MOVS R1,#+152
\ 000000BC 2970 STRB R1,[R5, #+0]
145 }
146 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_16:
\ 000000BE ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 000000C2 17E0 B ??OSFlagAccept_12
147 break;
148
149 case OS_FLAG_WAIT_CLR_ANY:
150 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_6:
\ 000000C4 2189 LDRH R1,[R4, #+8]
\ 000000C6 6A46 MOV R2,SP
\ 000000C8 1788 LDRH R7,[R2, #+0]
\ 000000CA 8F43 BICS R7,R7,R1
151 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
\ 000000CC 3F04 LSLS R7,R7,#+16 ;; ZeroExtS R7,R7,#+16,#+16
\ 000000CE 3F0C LSRS R7,R7,#+16
\ 000000D0 002F CMP R7,#+0
\ 000000D2 05D0 BEQ ??OSFlagAccept_17
152 if (consume == TRUE) { /* See if we need to consume the flags */
\ 000000D4 012E CMP R6,#+1
\ 000000D6 05D1 BNE ??OSFlagAccept_18
153 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
\ 000000D8 2189 LDRH R1,[R4, #+8]
\ 000000DA 3943 ORRS R1,R1,R7
\ 000000DC 2181 STRH R1,[R4, #+8]
\ 000000DE 01E0 B ??OSFlagAccept_18
154 }
155 } else {
156 *err = OS_FLAG_ERR_NOT_RDY;
\ ??OSFlagAccept_17:
\ 000000E0 9821 MOVS R1,#+152
\ 000000E2 2970 STRB R1,[R5, #+0]
157 }
158 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_18:
\ 000000E4 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 000000E8 04E0 B ??OSFlagAccept_12
159 break;
160 #endif
161
162 default:
163 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_9:
\ 000000EA ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
164 flags_rdy = (OS_FLAGS)0;
\ 000000EE 0027 MOVS R7,#+0
165 *err = OS_FLAG_ERR_WAIT_TYPE;
\ 000000F0 9720 MOVS R0,#+151
\ 000000F2 2870 STRB R0,[R5, #+0]
166 break;
167 }
168 return (flags_rdy);
\ ??OSFlagAccept_12:
\ 000000F4 3800 MOVS R0,R7
\ 000000F6 0004 LSLS R0,R0,#+16 ;; ZeroExtS R0,R0,#+16,#+16
\ 000000F8 000C LSRS R0,R0,#+16
\ ??OSFlagAccept_1:
\ 000000FA 01B0 ADD SP,SP,#+4
\ 000000FC F0BC POP {R4-R7}
\ 000000FE 02BC POP {R1}
\ 00000100 0847 BX R1 ;; return
169 }
170 #endif
171
172 /*$PAGE*/
173 /*
174 *********************************************************************************************************
175 * CREATE AN EVENT FLAG
176 *
177 * Description: This function is called to create an event flag group.
178 *
179 * Arguments : flags Contains the initial value to store in the event flag group.
180 *
181 * err is a pointer to an error code which will be returned to your application:
182 * OS_NO_ERR if the call was successful.
183 * OS_ERR_CREATE_ISR if you attempted to create an Event Flag from an
184 * ISR.
185 * OS_FLAG_GRP_DEPLETED if there are no more event flag groups
186 *
187 * Returns : A pointer to an event flag group or a NULL pointer if no more groups are available.
188 *
189 * Called from: Task ONLY
190 *********************************************************************************************************
191 */
192
\ In segment CODE, align 4, keep-with-next
193 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *err)
194 {
\ OSFlagCreate:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
195 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
196 OS_CPU_SR cpu_sr;
197 #endif
198 OS_FLAG_GRP *pgrp;
199
200
201 if (OSIntNesting > 0) { /* See if called from ISR ... */
\ 00000006 .... LDR R0,??DataTable4 ;; OSIntNesting
\ 00000008 0078 LDRB R0,[R0, #+0]
\ 0000000A 0128 CMP R0,#+1
\ 0000000C 03D3 BCC ??OSFlagCreate_0
202 *err = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
\ 0000000E 8D20 MOVS R0,#+141
\ 00000010 2870 STRB R0,[R5, #+0]
203 return ((OS_FLAG_GRP *)0);
\ 00000012 0020 MOVS R0,#+0
\ 00000014 1DE0 B ??OSFlagCreate_1
204 }
205 OS_ENTER_CRITICAL();
\ ??OSFlagCreate_0:
\ 00000016 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
206 pgrp = OSFlagFreeList; /* Get next free event flag */
\ 0000001A .... LDR R1,??DataTable8 ;; OSFlagFreeList
\ 0000001C 0E68 LDR R6,[R1, #+0]
207 if (pgrp != (OS_FLAG_GRP *)0) { /* See if we have event flag groups available */
\ 0000001E 002E CMP R6,#+0
\ 00000020 12D0 BEQ ??OSFlagCreate_2
208 /* Adjust free list */
209 OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
\ 00000022 .... LDR R1,??DataTable8 ;; OSFlagFreeList
\ 00000024 .... LDR R2,??DataTable8 ;; OSFlagFreeList
\ 00000026 1268 LDR R2,[R2, #+0]
\ 00000028 5268 LDR R2,[R2, #+4]
\ 0000002A 0A60 STR R2,[R1, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -