📄 os_q.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_q.o --depend=os_q.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uCOS-II\Source\os_q.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
OSQAccept PROC
;;;61 void *OSQAccept (OS_EVENT *pevent, INT8U *err)
;;;62 {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 e1a04000 MOV r4,r0
000008 e1a05001 MOV r5,r1
;;;63 void *msg;
;;;64 OS_Q *pq;
;;;65 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;66 OS_CPU_SR cpu_sr = 0;
00000c e3a08000 MOV r8,#0
;;;67 #endif
;;;68
;;;69
;;;70
;;;71 #if OS_ARG_CHK_EN > 0
;;;72 if (err == (INT8U *)0) { /* Validate 'err' */
000010 e3550000 CMP r5,#0
000014 1a000002 BNE |L1.36|
;;;73 return ((void *)0);
000018 e3a00000 MOV r0,#0
|L1.28|
00001c e8bd41f0 POP {r4-r8,lr}
;;;74 }
;;;75 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;76 *err = OS_ERR_PEVENT_NULL;
;;;77 return ((void *)0);
;;;78 }
;;;79 #endif
;;;80 if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type */
;;;81 *err = OS_ERR_EVENT_TYPE;
;;;82 return ((void *)0);
;;;83 }
;;;84 OS_ENTER_CRITICAL();
;;;85 pq = (OS_Q *)pevent->OSEventPtr; /* Point at queue control block */
;;;86 if (pq->OSQEntries > 0) { /* See if any messages in the queue */
;;;87 msg = *pq->OSQOut++; /* Yes, extract oldest message from the queue */
;;;88 pq->OSQEntries--; /* Update the number of entries in the queue */
;;;89 if (pq->OSQOut == pq->OSQEnd) { /* Wrap OUT pointer if we are at the end of the queue */
;;;90 pq->OSQOut = pq->OSQStart;
;;;91 }
;;;92 *err = OS_ERR_NONE;
;;;93 } else {
;;;94 *err = OS_ERR_Q_EMPTY;
;;;95 msg = (void *)0; /* Queue is empty */
;;;96 }
;;;97 OS_EXIT_CRITICAL();
;;;98 return (msg); /* Return message received (or NULL) */
;;;99 }
000020 e12fff1e BX lr
|L1.36|
000024 e3540000 CMP r4,#0
000028 1a000003 BNE |L1.60|
00002c e3a00004 MOV r0,#4
000030 e5c50000 STRB r0,[r5,#0]
000034 e3a00000 MOV r0,#0
000038 eafffff7 B |L1.28|
|L1.60|
00003c e5d40000 LDRB r0,[r4,#0]
000040 e3500002 CMP r0,#2
000044 0a000003 BEQ |L1.88|
000048 e3a00001 MOV r0,#1
00004c e5c50000 STRB r0,[r5,#0]
000050 e3a00000 MOV r0,#0
000054 eafffff0 B |L1.28|
|L1.88|
000058 ebfffffe BL OS_CPU_SR_Save
00005c e1a08000 MOV r8,r0
000060 e5947004 LDR r7,[r4,#4]
000064 e1d701b6 LDRH r0,[r7,#0x16]
000068 e3500000 CMP r0,#0
00006c da00000f BLE |L1.176|
000070 e5970010 LDR r0,[r7,#0x10]
000074 e2801004 ADD r1,r0,#4
000078 e5871010 STR r1,[r7,#0x10]
00007c e5906000 LDR r6,[r0,#0]
000080 e1d701b6 LDRH r0,[r7,#0x16]
000084 e2400001 SUB r0,r0,#1
000088 e1c701b6 STRH r0,[r7,#0x16]
00008c e5970010 LDR r0,[r7,#0x10]
000090 e5971008 LDR r1,[r7,#8]
000094 e1500001 CMP r0,r1
000098 1a000001 BNE |L1.164|
00009c e5970004 LDR r0,[r7,#4]
0000a0 e5870010 STR r0,[r7,#0x10]
|L1.164|
0000a4 e3a00000 MOV r0,#0
0000a8 e5c50000 STRB r0,[r5,#0]
0000ac ea000002 B |L1.188|
|L1.176|
0000b0 e3a0001f MOV r0,#0x1f
0000b4 e5c50000 STRB r0,[r5,#0]
0000b8 e3a06000 MOV r6,#0
|L1.188|
0000bc e1a00008 MOV r0,r8
0000c0 ebfffffe BL OS_CPU_SR_Restore
0000c4 e1a00006 MOV r0,r6
0000c8 eaffffd3 B |L1.28|
ENDP
OSQCreate PROC
;;;121 OS_EVENT *OSQCreate (void **start, INT16U size)
;;;122 {
0000cc e92d41f0 PUSH {r4-r8,lr}
0000d0 e1a04000 MOV r4,r0
0000d4 e1a05001 MOV r5,r1
;;;123 OS_EVENT *pevent;
;;;124 OS_Q *pq;
;;;125 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;126 OS_CPU_SR cpu_sr = 0;
0000d8 e3a08000 MOV r8,#0
;;;127 #endif
;;;128
;;;129
;;;130
;;;131 if (OSIntNesting > 0) { /* See if called from ISR ... */
0000dc e59f0ac0 LDR r0,|L1.2980|
0000e0 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
0000e4 e3500000 CMP r0,#0
0000e8 da000002 BLE |L1.248|
;;;132 return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
0000ec e3a00000 MOV r0,#0
|L1.240|
0000f0 e8bd41f0 POP {r4-r8,lr}
;;;133 }
;;;134 OS_ENTER_CRITICAL();
;;;135 pevent = OSEventFreeList; /* Get next free event control block */
;;;136 if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
;;;137 OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
;;;138 }
;;;139 OS_EXIT_CRITICAL();
;;;140 if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */
;;;141 OS_ENTER_CRITICAL();
;;;142 pq = OSQFreeList; /* Get a free queue control block */
;;;143 if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */
;;;144 OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/
;;;145 OS_EXIT_CRITICAL();
;;;146 pq->OSQStart = start; /* Initialize the queue */
;;;147 pq->OSQEnd = &start[size];
;;;148 pq->OSQIn = start;
;;;149 pq->OSQOut = start;
;;;150 pq->OSQSize = size;
;;;151 pq->OSQEntries = 0;
;;;152 pevent->OSEventType = OS_EVENT_TYPE_Q;
;;;153 pevent->OSEventCnt = 0;
;;;154 pevent->OSEventPtr = pq;
;;;155 #if OS_EVENT_NAME_SIZE > 1
;;;156 pevent->OSEventName[0] = '?'; /* Unknown name */
;;;157 pevent->OSEventName[1] = OS_ASCII_NUL;
;;;158 #endif
;;;159 OS_EventWaitListInit(pevent); /* Initalize the wait list */
;;;160 } else {
;;;161 pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */
;;;162 OSEventFreeList = pevent;
;;;163 OS_EXIT_CRITICAL();
;;;164 pevent = (OS_EVENT *)0;
;;;165 }
;;;166 }
;;;167 return (pevent);
;;;168 }
0000f4 e12fff1e BX lr
|L1.248|
0000f8 ebfffffe BL OS_CPU_SR_Save
0000fc e1a08000 MOV r8,r0
000100 e59f0aa0 LDR r0,|L1.2984|
000104 e5906000 LDR r6,[r0,#0] ; OSEventFreeList
000108 e5900000 LDR r0,[r0,#0] ; OSEventFreeList
00010c e3500000 CMP r0,#0
000110 0a000004 BEQ |L1.296|
000114 e59f0a8c LDR r0,|L1.2984|
000118 e5900000 LDR r0,[r0,#0] ; OSEventFreeList
00011c e5900004 LDR r0,[r0,#4]
000120 e59f1a80 LDR r1,|L1.2984|
000124 e5810000 STR r0,[r1,#0] ; OSEventFreeList
|L1.296|
000128 e1a00008 MOV r0,r8
00012c ebfffffe BL OS_CPU_SR_Restore
000130 e3560000 CMP r6,#0
000134 0a000028 BEQ |L1.476|
000138 ebfffffe BL OS_CPU_SR_Save
00013c e1a08000 MOV r8,r0
000140 e59f0a64 LDR r0,|L1.2988|
000144 e5907000 LDR r7,[r0,#0] ; OSQFreeList
000148 e3570000 CMP r7,#0
00014c 0a00001a BEQ |L1.444|
000150 e59f0a54 LDR r0,|L1.2988|
000154 e5900000 LDR r0,[r0,#0] ; OSQFreeList
000158 e5900000 LDR r0,[r0,#0]
00015c e59f1a48 LDR r1,|L1.2988|
000160 e5810000 STR r0,[r1,#0] ; OSQFreeList
000164 e1a00008 MOV r0,r8
000168 ebfffffe BL OS_CPU_SR_Restore
00016c e5874004 STR r4,[r7,#4]
000170 e0840105 ADD r0,r4,r5,LSL #2
000174 e5870008 STR r0,[r7,#8]
000178 e587400c STR r4,[r7,#0xc]
00017c e5874010 STR r4,[r7,#0x10]
000180 e1c751b4 STRH r5,[r7,#0x14]
000184 e3a00000 MOV r0,#0
000188 e1c701b6 STRH r0,[r7,#0x16]
00018c e3a00002 MOV r0,#2
000190 e5c60000 STRB r0,[r6,#0]
000194 e3a00000 MOV r0,#0
000198 e1c600b8 STRH r0,[r6,#8]
00019c e5867004 STR r7,[r6,#4]
0001a0 e3a0003f MOV r0,#0x3f
0001a4 e5c6000f STRB r0,[r6,#0xf]
0001a8 e3a00000 MOV r0,#0
0001ac e5c60010 STRB r0,[r6,#0x10]
0001b0 e1a00006 MOV r0,r6
0001b4 ebfffffe BL OS_EventWaitListInit
0001b8 ea000007 B |L1.476|
|L1.444|
0001bc e59f09e4 LDR r0,|L1.2984|
0001c0 e5900000 LDR r0,[r0,#0] ; OSEventFreeList
0001c4 e5860004 STR r0,[r6,#4]
0001c8 e59f09d8 LDR r0,|L1.2984|
0001cc e5806000 STR r6,[r0,#0] ; OSEventFreeList
0001d0 e1a00008 MOV r0,r8
0001d4 ebfffffe BL OS_CPU_SR_Restore
0001d8 e3a06000 MOV r6,#0
|L1.476|
0001dc e1a00006 MOV r0,r6
0001e0 eaffffc2 B |L1.240|
ENDP
OSQDel PROC
;;;212 OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
;;;213 {
0001e4 e92d47f0 PUSH {r4-r10,lr}
0001e8 e1a04000 MOV r4,r0
0001ec e1a05001 MOV r5,r1
0001f0 e1a06002 MOV r6,r2
;;;214 BOOLEAN tasks_waiting;
;;;215 OS_EVENT *pevent_return;
;;;216 OS_Q *pq;
;;;217 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;218 OS_CPU_SR cpu_sr = 0;
0001f4 e3a0a000 MOV r10,#0
;;;219 #endif
;;;220
;;;221
;;;222
;;;223 #if OS_ARG_CHK_EN > 0
;;;224 if (err == (INT8U *)0) { /* Validate 'err' */
0001f8 e3560000 CMP r6,#0
0001fc 1a000002 BNE |L1.524|
;;;225 return (pevent);
000200 e1a00004 MOV r0,r4
|L1.516|
000204 e8bd47f0 POP {r4-r10,lr}
;;;226 }
;;;227 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;228 *err = OS_ERR_PEVENT_NULL;
;;;229 return (pevent);
;;;230 }
;;;231 #endif
;;;232 if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
;;;233 *err = OS_ERR_EVENT_TYPE;
;;;234 return (pevent);
;;;235 }
;;;236 if (OSIntNesting > 0) { /* See if called from ISR ... */
;;;237 *err = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
;;;238 return (pevent);
;;;239 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -