?? os_q.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_q.o --depend=.\rvmdk\os_q.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uCOS-II\Source\os_q.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSQAccept PROC
;;;61 void *OSQAccept (OS_EVENT *pevent, INT8U *perr)
;;;62 {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
000004 460c MOV r4,r1
;;;63 void *pmsg;
;;;64 OS_Q *pq;
;;;65 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;66 OS_CPU_SR cpu_sr = 0;
;;;67 #endif
;;;68
;;;69
;;;70
;;;71 #if OS_ARG_CHK_EN > 0
;;;72 if (perr == (INT8U *)0) { /* Validate 'perr' */
000006 b90c CBNZ r4,|L1.12|
;;;73 return ((void *)0);
000008 2000 MOVS r0,#0
;;;74 }
;;;75 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;76 *perr = OS_ERR_PEVENT_NULL;
;;;77 return ((void *)0);
;;;78 }
;;;79 #endif
;;;80 if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type */
;;;81 *perr = 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 pmsg = *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 *perr = OS_ERR_NONE;
;;;93 } else {
;;;94 *perr = OS_ERR_Q_EMPTY;
;;;95 pmsg = (void *)0; /* Queue is empty */
;;;96 }
;;;97 OS_EXIT_CRITICAL();
;;;98 return (pmsg); /* Return message received (or NULL) */
;;;99 }
00000a bd70 POP {r4-r6,pc}
|L1.12|
00000c b91d CBNZ r5,|L1.22|
00000e 2004 MOVS r0,#4
000010 7020 STRB r0,[r4,#0]
000012 2000 MOVS r0,#0
000014 bd70 POP {r4-r6,pc}
|L1.22|
000016 7828 LDRB r0,[r5,#0]
000018 2802 CMP r0,#2
00001a d003 BEQ |L1.36|
00001c 2001 MOVS r0,#1
00001e 7020 STRB r0,[r4,#0]
000020 2000 MOVS r0,#0
000022 bd70 POP {r4-r6,pc}
|L1.36|
000024 f7fff7ff BL OS_CPU_SR_Save
000028 6869 LDR r1,[r5,#4]
00002a 8aca LDRH r2,[r1,#0x16]
00002c b172 CBZ r2,|L1.76|
00002e 690b LDR r3,[r1,#0x10]
000030 1d1a ADDS r2,r3,#4
000032 610a STR r2,[r1,#0x10]
000034 681d LDR r5,[r3,#0]
000036 8acb LDRH r3,[r1,#0x16]
000038 1e5b SUBS r3,r3,#1
00003a 82cb STRH r3,[r1,#0x16]
00003c 688b LDR r3,[r1,#8]
00003e 429a CMP r2,r3
000040 d101 BNE |L1.70|
000042 684a LDR r2,[r1,#4]
000044 610a STR r2,[r1,#0x10]
|L1.70|
000046 2100 MOVS r1,#0
000048 7021 STRB r1,[r4,#0]
00004a e002 B |L1.82|
|L1.76|
00004c 211f MOVS r1,#0x1f
00004e 7021 STRB r1,[r4,#0]
000050 2500 MOVS r5,#0
|L1.82|
000052 f7fff7ff BL OS_CPU_SR_Restore
000056 4628 MOV r0,r5
000058 bd70 POP {r4-r6,pc}
;;;100 #endif
ENDP
OSQCreate PROC
;;;121 OS_EVENT *OSQCreate (void **start, INT16U size)
;;;122 {
00005a e92de92d PUSH {r4-r8,lr}
00005e 4606 MOV r6,r0
000060 460f MOV r7,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;
;;;127 #endif
;;;128
;;;129
;;;130
;;;131 if (OSIntNesting > 0) { /* See if called from ISR ... */
000062 48fc LDR r0,|L1.1108|
000064 7800 LDRB r0,[r0,#0] ; OSIntNesting
000066 b110 CBZ r0,|L1.110|
;;;132 return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
000068 2000 MOVS r0,#0
00006a e8bde8bd POP {r4-r8,pc}
|L1.110|
;;;133 }
;;;134 OS_ENTER_CRITICAL();
00006e f7fff7ff BL OS_CPU_SR_Save
;;;135 pevent = OSEventFreeList; /* Get next free event control block */
000072 f8dff8df LDR r8,|L1.1112|
000076 f8d8f8d8 LDR r4,[r8,#0] ; OSEventFreeList
;;;136 if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
00007a b114 CBZ r4,|L1.130|
;;;137 OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
00007c 6861 LDR r1,[r4,#4]
00007e f8c8f8c8 STR r1,[r8,#0] ; OSEventFreeList
|L1.130|
;;;138 }
;;;139 OS_EXIT_CRITICAL();
000082 f7fff7ff BL OS_CPU_SR_Restore
;;;140 if (pevent != (OS_EVENT *)0) { /* See if we have an event control block */
000086 2c00 CMP r4,#0
000088 d024 BEQ |L1.212|
;;;141 OS_ENTER_CRITICAL();
00008a f7fff7ff BL OS_CPU_SR_Save
;;;142 pq = OSQFreeList; /* Get a free queue control block */
00008e 49f3 LDR r1,|L1.1116|
000090 680d LDR r5,[r1,#0] ; OSQFreeList
;;;143 if (pq != (OS_Q *)0) { /* Were we able to get a queue control block ? */
000092 b1bd CBZ r5,|L1.196|
;;;144 OSQFreeList = OSQFreeList->OSQPtr; /* Yes, Adjust free list pointer to next free*/
000094 682a LDR r2,[r5,#0]
000096 600a STR r2,[r1,#0] ; OSQFreeList
;;;145 OS_EXIT_CRITICAL();
000098 f7fff7ff BL OS_CPU_SR_Restore
;;;146 pq->OSQStart = start; /* Initialize the queue */
00009c 606e STR r6,[r5,#4]
;;;147 pq->OSQEnd = &start[size];
00009e eb06eb06 ADD r0,r6,r7,LSL #2
0000a2 60a8 STR r0,[r5,#8]
;;;148 pq->OSQIn = start;
0000a4 60ee STR r6,[r5,#0xc]
;;;149 pq->OSQOut = start;
0000a6 612e STR r6,[r5,#0x10]
;;;150 pq->OSQSize = size;
0000a8 82af STRH r7,[r5,#0x14]
;;;151 pq->OSQEntries = 0;
0000aa 2000 MOVS r0,#0
0000ac 82e8 STRH r0,[r5,#0x16]
;;;152 pevent->OSEventType = OS_EVENT_TYPE_Q;
0000ae 2102 MOVS r1,#2
0000b0 7021 STRB r1,[r4,#0]
;;;153 pevent->OSEventCnt = 0;
0000b2 8120 STRH r0,[r4,#8]
;;;154 pevent->OSEventPtr = pq;
0000b4 6065 STR r5,[r4,#4]
;;;155 #if OS_EVENT_NAME_SIZE > 1
;;;156 pevent->OSEventName[0] = '?'; /* Unknown name */
0000b6 213f MOVS r1,#0x3f
0000b8 73e1 STRB r1,[r4,#0xf]
;;;157 pevent->OSEventName[1] = OS_ASCII_NUL;
0000ba 7420 STRB r0,[r4,#0x10]
;;;158 #endif
;;;159 OS_EventWaitListInit(pevent); /* Initalize the wait list */
0000bc 4620 MOV r0,r4
0000be f7fff7ff BL OS_EventWaitListInit
0000c2 e007 B |L1.212|
|L1.196|
;;;160 } else {
;;;161 pevent->OSEventPtr = (void *)OSEventFreeList; /* No, Return event control block on error */
0000c4 f8d8f8d8 LDR r1,[r8,#0] ; OSEventFreeList
0000c8 6061 STR r1,[r4,#4]
;;;162 OSEventFreeList = pevent;
0000ca f8c8f8c8 STR r4,[r8,#0] ; OSEventFreeList
;;;163 OS_EXIT_CRITICAL();
0000ce f7fff7ff BL OS_CPU_SR_Restore
;;;164 pevent = (OS_EVENT *)0;
0000d2 2400 MOVS r4,#0
|L1.212|
;;;165 }
;;;166 }
;;;167 return (pevent);
0000d4 4620 MOV r0,r4
;;;168 }
0000d6 e8bde8bd POP {r4-r8,pc}
;;;169 /*$PAGE*/
ENDP
OSQDel PROC
;;;212 OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
;;;213 {
0000da e92de92d PUSH {r4-r12,lr}
0000de 4604 MOV r4,r0
0000e0 460f MOV r7,r1
0000e2 4615 MOV r5,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;
;;;219 #endif
;;;220
;;;221
;;;222
;;;223 #if OS_ARG_CHK_EN > 0
;;;224 if (perr == (INT8U *)0) { /* Validate 'perr' */
0000e4 b915 CBNZ r5,|L1.236|
;;;225 return (pevent);
0000e6 4620 MOV r0,r4
0000e8 e8bde8bd POP {r4-r12,pc}
|L1.236|
;;;226 }
;;;227 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
0000ec b924 CBNZ r4,|L1.248|
;;;228 *perr = OS_ERR_PEVENT_NULL;
0000ee 2004 MOVS r0,#4
0000f0 7028 STRB r0,[r5,#0]
;;;229 return (pevent);
0000f2 4620 MOV r0,r4
0000f4 e8bde8bd POP {r4-r12,pc}
|L1.248|
;;;230 }
;;;231 #endif
;;;232 if (pevent->OSEventType != OS_EVENT_TYPE_Q) { /* Validate event block type */
0000f8 7820 LDRB r0,[r4,#0]
0000fa 2802 CMP r0,#2
0000fc d004 BEQ |L1.264|
;;;233 *perr = OS_ERR_EVENT_TYPE;
0000fe 2001 MOVS r0,#1
000100 7028 STRB r0,[r5,#0]
;;;234 return (pevent);
000102 4620 MOV r0,r4
000104 e8bde8bd POP {r4-r12,pc}
|L1.264|
;;;235 }
;;;236 if (OSIntNesting > 0) { /* See if called from ISR ... */
000108 48d2 LDR r0,|L1.1108|
00010a 7800 LDRB r0,[r0,#0] ; OSIntNesting
00010c b120 CBZ r0,|L1.280|
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -