📄 os_q.lst
字号:
221
222
223 #if OS_ARG_CHK_EN > 0
224 if (err == (INT8U *)0) { /* Validate 'err' */
\ 00000018 000055E3 CMP R5,#+0
\ 0000001C 0100001A BNE ??OSQDel_0
225 return (pevent);
\ 00000020 0A00B0E1 MOVS R0,R10
\ 00000024 740000EA B ??OSQDel_1
226 }
227 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
\ ??OSQDel_0:
\ 00000028 00005AE3 CMP R10,#+0
\ 0000002C 0300001A BNE ??OSQDel_2
228 *err = OS_ERR_PEVENT_NULL;
\ 00000030 0400A0E3 MOV R0,#+4
\ 00000034 0000C5E5 STRB R0,[R5, #+0]
229 return (pevent);
\ 00000038 0A00B0E1 MOVS R0,R10
\ 0000003C 6E0000EA B ??OSQDel_1
230 }
231 #endif
232 if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
\ ??OSQDel_2:
\ 00000040 0000DAE5 LDRB R0,[R10, #+0]
\ 00000044 020050E3 CMP R0,#+2
\ 00000048 0300000A BEQ ??OSQDel_3
233 *err = OS_ERR_EVENT_TYPE;
\ 0000004C 0100A0E3 MOV R0,#+1
\ 00000050 0000C5E5 STRB R0,[R5, #+0]
234 return (pevent);
\ 00000054 0A00B0E1 MOVS R0,R10
\ 00000058 670000EA B ??OSQDel_1
235 }
236 if (OSIntNesting > 0) { /* See if called from ISR ... */
\ ??OSQDel_3:
\ 0000005C ........ LDR R0,??DataTable19 ;; OSIntNesting
\ 00000060 0000D0E5 LDRB R0,[R0, #+0]
\ 00000064 010050E3 CMP R0,#+1
\ 00000068 0300003A BCC ??OSQDel_4
237 *err = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
\ 0000006C 0F00A0E3 MOV R0,#+15
\ 00000070 0000C5E5 STRB R0,[R5, #+0]
238 return (pevent);
\ 00000074 0A00B0E1 MOVS R0,R10
\ 00000078 5F0000EA B ??OSQDel_1
239 }
240 OS_ENTER_CRITICAL();
\ ??OSQDel_4:
\ 0000007C ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
\ 00000080 0090B0E1 MOVS R9,R0
241 if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on queue */
\ 00000084 0A00DAE5 LDRB R0,[R10, #+10]
\ 00000088 000050E3 CMP R0,#+0
\ 0000008C 0200000A BEQ ??OSQDel_5
242 tasks_waiting = OS_TRUE; /* Yes */
\ 00000090 0100A0E3 MOV R0,#+1
\ 00000094 0060B0E1 MOVS R6,R0
\ 00000098 010000EA B ??OSQDel_6
243 } else {
244 tasks_waiting = OS_FALSE; /* No */
\ ??OSQDel_5:
\ 0000009C 0000A0E3 MOV R0,#+0
\ 000000A0 0060B0E1 MOVS R6,R0
245 }
246 switch (opt) {
\ ??OSQDel_6:
\ 000000A4 0400B0E1 MOVS R0,R4
\ 000000A8 000050E3 CMP R0,#+0
\ 000000AC 0200000A BEQ ??OSQDel_7
\ 000000B0 010050E3 CMP R0,#+1
\ 000000B4 2300000A BEQ ??OSQDel_8
\ 000000B8 490000EA B ??OSQDel_9
247 case OS_DEL_NO_PEND: /* Delete queue only if no task waiting */
248 if (tasks_waiting == OS_FALSE) {
\ ??OSQDel_7:
\ 000000BC 000056E3 CMP R6,#+0
\ 000000C0 1A00001A BNE ??OSQDel_10
249 #if OS_EVENT_NAME_SIZE > 1
250 pevent->OSEventName[0] = '?'; /* Unknown name */
\ 000000C4 3F00A0E3 MOV R0,#+63
\ 000000C8 0F00CAE5 STRB R0,[R10, #+15]
251 pevent->OSEventName[1] = OS_ASCII_NUL;
\ 000000CC 0000A0E3 MOV R0,#+0
\ 000000D0 1000CAE5 STRB R0,[R10, #+16]
252 #endif
253 pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
\ 000000D4 04009AE5 LDR R0,[R10, #+4]
\ 000000D8 0080B0E1 MOVS R8,R0
254 pq->OSQPtr = OSQFreeList;
\ 000000DC ........ LDR R0,??DataTable20 ;; OSQFreeList
\ 000000E0 000090E5 LDR R0,[R0, #+0]
\ 000000E4 000088E5 STR R0,[R8, #+0]
255 OSQFreeList = pq;
\ 000000E8 ........ LDR R0,??DataTable20 ;; OSQFreeList
\ 000000EC 008080E5 STR R8,[R0, #+0]
256 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
\ 000000F0 0000A0E3 MOV R0,#+0
\ 000000F4 0000CAE5 STRB R0,[R10, #+0]
257 pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
\ 000000F8 ........ LDR R0,??DataTable18 ;; OSEventFreeList
\ 000000FC 000090E5 LDR R0,[R0, #+0]
\ 00000100 04008AE5 STR R0,[R10, #+4]
258 pevent->OSEventCnt = 0;
\ 00000104 0000A0E3 MOV R0,#+0
\ 00000108 B800CAE1 STRH R0,[R10, #+8]
259 OSEventFreeList = pevent; /* Get next free event control block */
\ 0000010C ........ LDR R0,??DataTable18 ;; OSEventFreeList
\ 00000110 00A080E5 STR R10,[R0, #+0]
260 OS_EXIT_CRITICAL();
\ 00000114 0900B0E1 MOVS R0,R9
\ 00000118 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
261 *err = OS_ERR_NONE;
\ 0000011C 0000A0E3 MOV R0,#+0
\ 00000120 0000C5E5 STRB R0,[R5, #+0]
262 pevent_return = (OS_EVENT *)0; /* Queue has been deleted */
\ 00000124 0000A0E3 MOV R0,#+0
\ 00000128 0070B0E1 MOVS R7,R0
\ 0000012C 310000EA B ??OSQDel_11
263 } else {
264 OS_EXIT_CRITICAL();
\ ??OSQDel_10:
\ 00000130 0900B0E1 MOVS R0,R9
\ 00000134 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
265 *err = OS_ERR_TASK_WAITING;
\ 00000138 4900A0E3 MOV R0,#+73
\ 0000013C 0000C5E5 STRB R0,[R5, #+0]
266 pevent_return = pevent;
\ 00000140 0A70B0E1 MOVS R7,R10
\ 00000144 2B0000EA B ??OSQDel_11
267 }
268 break;
269
270 case OS_DEL_ALWAYS: /* Always delete the queue */
271 while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for queue */
\ ??OSQDel_8:
\ 00000148 0A00DAE5 LDRB R0,[R10, #+10]
\ 0000014C 000050E3 CMP R0,#+0
\ 00000150 0500000A BEQ ??OSQDel_12
272 (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_Q, OS_STAT_PEND_OK);
\ 00000154 0030A0E3 MOV R3,#+0
\ 00000158 0420A0E3 MOV R2,#+4
\ 0000015C 0010A0E3 MOV R1,#+0
\ 00000160 0A00B0E1 MOVS R0,R10
\ 00000164 ........ _BLF OS_EventTaskRdy,??OS_EventTaskRdy??rA
\ 00000168 F6FFFFEA B ??OSQDel_8
273 }
274 #if OS_EVENT_NAME_SIZE > 1
275 pevent->OSEventName[0] = '?'; /* Unknown name */
\ ??OSQDel_12:
\ 0000016C 3F00A0E3 MOV R0,#+63
\ 00000170 0F00CAE5 STRB R0,[R10, #+15]
276 pevent->OSEventName[1] = OS_ASCII_NUL;
\ 00000174 0000A0E3 MOV R0,#+0
\ 00000178 1000CAE5 STRB R0,[R10, #+16]
277 #endif
278 pq = (OS_Q *)pevent->OSEventPtr; /* Return OS_Q to free list */
\ 0000017C 04009AE5 LDR R0,[R10, #+4]
\ 00000180 0080B0E1 MOVS R8,R0
279 pq->OSQPtr = OSQFreeList;
\ 00000184 ........ LDR R0,??DataTable20 ;; OSQFreeList
\ 00000188 000090E5 LDR R0,[R0, #+0]
\ 0000018C 000088E5 STR R0,[R8, #+0]
280 OSQFreeList = pq;
\ 00000190 ........ LDR R0,??DataTable20 ;; OSQFreeList
\ 00000194 008080E5 STR R8,[R0, #+0]
281 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
\ 00000198 0000A0E3 MOV R0,#+0
\ 0000019C 0000CAE5 STRB R0,[R10, #+0]
282 pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
\ 000001A0 ........ LDR R0,??DataTable18 ;; OSEventFreeList
\ 000001A4 000090E5 LDR R0,[R0, #+0]
\ 000001A8 04008AE5 STR R0,[R10, #+4]
283 pevent->OSEventCnt = 0;
\ 000001AC 0000A0E3 MOV R0,#+0
\ 000001B0 B800CAE1 STRH R0,[R10, #+8]
284 OSEventFreeList = pevent; /* Get next free event control block */
\ 000001B4 ........ LDR R0,??DataTable18 ;; OSEventFreeList
\ 000001B8 00A080E5 STR R10,[R0, #+0]
285 OS_EXIT_CRITICAL();
\ 000001BC 0900B0E1 MOVS R0,R9
\ 000001C0 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
286 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
\ 000001C4 010056E3 CMP R6,#+1
\ 000001C8 0000001A BNE ??OSQDel_13
287 OS_Sched(); /* Find highest priority task ready to run */
\ 000001CC ........ _BLF OS_Sched,??OS_Sched??rA
288 }
289 *err = OS_ERR_NONE;
\ ??OSQDel_13:
\ 000001D0 0000A0E3 MOV R0,#+0
\ 000001D4 0000C5E5 STRB R0,[R5, #+0]
290 pevent_return = (OS_EVENT *)0; /* Queue has been deleted */
\ 000001D8 0000A0E3 MOV R0,#+0
\ 000001DC 0070B0E1 MOVS R7,R0
\ 000001E0 040000EA B ??OSQDel_11
291 break;
292
293 default:
294 OS_EXIT_CRITICAL();
\ ??OSQDel_9:
\ 000001E4 0900B0E1 MOVS R0,R9
\ 000001E8 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
295 *err = OS_ERR_INVALID_OPT;
\ 000001EC 0700A0E3 MOV R0,#+7
\ 000001F0 0000C5E5 STRB R0,[R5, #+0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -