📄 os_flag.lst
字号:
117 }
118 } else {
119 *err = OS_FLAG_ERR_NOT_RDY;
\ ??OSFlagAccept_11:
\ 0000005E 9821 MOVS R1,#+152
\ 00000060 2970 STRB R1,[R5, #+0]
120 }
121 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_13:
\ 00000062 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
\ 00000066 1DE0 B ??OSFlagAccept_14
122 break;
123
124 case OS_FLAG_WAIT_SET_ANY:
125 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_9:
\ 00000068 2189 LDRH R1,[R4, #+8]
\ 0000006A 6A46 MOV R2,SP
\ 0000006C 1788 LDRH R7,[R2, #+0]
\ 0000006E 0F40 ANDS R7,R7,R1
126 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
\ 00000070 F5D0 BEQ ??OSFlagAccept_11
127 if (consume == TRUE) { /* See if we need to consume the flags */
\ 00000072 EFE7 B.N ??OSFlagAccept_12
128 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
129 }
130 } else {
131 *err = OS_FLAG_ERR_NOT_RDY;
132 }
133 OS_EXIT_CRITICAL();
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_6:
\ 00000074 2189 LDRH R1,[R4, #+8]
\ 00000076 6A46 MOV R2,SP
\ 00000078 1788 LDRH R7,[R2, #+0]
\ 0000007A 8F43 BICS R7,R7,R1
139 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
\ 0000007C 1288 LDRH R2,[R2, #+0]
\ 0000007E 9742 CMP R7,R2
\ 00000080 EDD1 BNE ??OSFlagAccept_11
140 if (consume == TRUE) { /* See if we need to consume the flags */
\ ??OSFlagAccept_15:
\ 00000082 012E CMP R6,#+1
\ 00000084 EDD1 BNE ??OSFlagAccept_13
141 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
\ 00000086 3A00 MOVS R2,R7
\ 00000088 0A43 ORRS R2,R2,R1
\ 0000008A 2281 STRH R2,[R4, #+8]
\ 0000008C E9E7 B ??OSFlagAccept_13
142 }
143 } else {
144 *err = OS_FLAG_ERR_NOT_RDY;
145 }
146 OS_EXIT_CRITICAL();
147 break;
148
149 case OS_FLAG_WAIT_CLR_ANY:
150 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
\ ??OSFlagAccept_7:
\ 0000008E 2189 LDRH R1,[R4, #+8]
\ 00000090 6A46 MOV R2,SP
\ 00000092 1788 LDRH R7,[R2, #+0]
\ 00000094 8F43 BICS R7,R7,R1
151 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
\ 00000096 E2D0 BEQ ??OSFlagAccept_11
152 if (consume == TRUE) { /* See if we need to consume the flags */
\ 00000098 F3E7 B.N ??OSFlagAccept_15
153 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
154 }
155 } else {
156 *err = OS_FLAG_ERR_NOT_RDY;
157 }
158 OS_EXIT_CRITICAL();
159 break;
160 #endif
161
162 default:
163 OS_EXIT_CRITICAL();
\ ??OSFlagAccept_10:
\ 0000009A ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
164 flags_rdy = (OS_FLAGS)0;
\ 0000009E 0027 MOVS R7,#+0
165 *err = OS_FLAG_ERR_WAIT_TYPE;
\ 000000A0 9720 MOVS R0,#+151
\ 000000A2 2870 STRB R0,[R5, #+0]
166 break;
167 }
168 return (flags_rdy);
\ ??OSFlagAccept_14:
\ 000000A4 3800 MOVS R0,R7
\ ??OSFlagAccept_2:
\ 000000A6 01B0 ADD SP,SP,#+4
\ 000000A8 F0BC POP {R4-R7}
\ 000000AA 02BC POP {R1}
\ 000000AC 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 0500 MOVS R5,R0
\ 00000004 0C00 MOVS R4,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,??DataTable2 ;; OSIntNesting
\ 00000008 0078 LDRB R0,[R0, #+0]
\ 0000000A 0028 CMP R0,#+0
\ 0000000C 03D0 BEQ ??OSFlagCreate_0
202 *err = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
\ 0000000E 8D20 MOVS R0,#+141
\ 00000010 2070 STRB R0,[R4, #+0]
203 return ((OS_FLAG_GRP *)0);
\ 00000012 0020 MOVS R0,#+0
\ 00000014 19E0 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,??DataTable6 ;; 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 0ED0 BEQ ??OSFlagCreate_2
208 /* Adjust free list */
209 OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
\ 00000022 7268 LDR R2,[R6, #+4]
\ 00000024 0A60 STR R2,[R1, #+0]
210 pgrp->OSFlagType = OS_EVENT_TYPE_FLAG; /* Set to event flag group type */
\ 00000026 0521 MOVS R1,#+5
\ 00000028 3170 STRB R1,[R6, #+0]
211 pgrp->OSFlagFlags = flags; /* Set to desired initial value */
\ 0000002A 3581 STRH R5,[R6, #+8]
212 pgrp->OSFlagWaitList = (void *)0; /* Clear list of tasks waiting on flags */
\ 0000002C 0021 MOVS R1,#+0
\ 0000002E 7160 STR R1,[R6, #+4]
213 #if OS_FLAG_NAME_SIZE > 1
214 pgrp->OSFlagName[0] = '?';
\ 00000030 3F21 MOVS R1,#+63
\ 00000032 B172 STRB R1,[R6, #+10]
215 pgrp->OSFlagName[1] = OS_ASCII_NUL;
\ 00000034 0021 MOVS R1,#+0
\ 00000036 F172 STRB R1,[R6, #+11]
216 #endif
217 OS_EXIT_CRITICAL();
\ 00000038 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
218 *err = OS_NO_ERR;
\ 0000003C 0020 MOVS R0,#+0
\ 0000003E 02E0 B ??OSFlagCreate_3
219 } else {
220 OS_EXIT_CRITICAL();
\ ??OSFlagCreate_2:
\ 00000040 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
221 *err = OS_FLAG_GRP_DEPLETED;
\ 00000044 9A20 MOVS R0,#+154
\ ??OSFlagCreate_3:
\ 00000046 2070 STRB R0,[R4, #+0]
222 }
223 return (pgrp); /* Return pointer to event flag group */
\ 00000048 3000 MOVS R0,R6
\ ??OSFlagCreate_1:
\ 0000004A 70BC POP {R4-R6}
\ 0000004C 02BC POP {R1}
\ 0000004E 0847 BX R1 ;; return
224 }
225
226 /*$PAGE*/
227 /*
228 *********************************************************************************************************
229 * DELETE AN EVENT FLAG GROUP
230 *
231 * Description: This function deletes an event flag group and readies all tasks pending on the event flag
232 * group.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -