?? os_mbox.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_mbox.o --depend=.\rvmdk\os_mbox.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_mbox.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSMboxAccept PROC
;;;47 void *OSMboxAccept (OS_EVENT *pevent)
;;;48 {
000000 b570 PUSH {r4-r6,lr}
000002 4604 MOV r4,r0
;;;49 void *pmsg;
;;;50 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;51 OS_CPU_SR cpu_sr = 0;
;;;52 #endif
;;;53
;;;54
;;;55
;;;56 #if OS_ARG_CHK_EN > 0
;;;57 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
000004 b90c CBNZ r4,|L1.10|
;;;58 return ((void *)0);
000006 2000 MOVS r0,#0
;;;59 }
;;;60 #endif
;;;61 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
;;;62 return ((void *)0);
;;;63 }
;;;64 OS_ENTER_CRITICAL();
;;;65 pmsg = pevent->OSEventPtr;
;;;66 pevent->OSEventPtr = (void *)0; /* Clear the mailbox */
;;;67 OS_EXIT_CRITICAL();
;;;68 return (pmsg); /* Return the message received (or NULL) */
;;;69 }
000008 bd70 POP {r4-r6,pc}
|L1.10|
00000a 7820 LDRB r0,[r4,#0]
00000c 2801 CMP r0,#1
00000e d001 BEQ |L1.20|
000010 2000 MOVS r0,#0
000012 bd70 POP {r4-r6,pc}
|L1.20|
000014 f7fff7ff BL OS_CPU_SR_Save
000018 6865 LDR r5,[r4,#4]
00001a 2100 MOVS r1,#0
00001c 6061 STR r1,[r4,#4]
00001e f7fff7ff BL OS_CPU_SR_Restore
000022 4628 MOV r0,r5
000024 bd70 POP {r4-r6,pc}
;;;70 #endif
ENDP
OSMboxCreate PROC
;;;88 OS_EVENT *OSMboxCreate (void *pmsg)
;;;89 {
000026 b570 PUSH {r4-r6,lr}
000028 4605 MOV r5,r0
;;;90 OS_EVENT *pevent;
;;;91 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;92 OS_CPU_SR cpu_sr = 0;
;;;93 #endif
;;;94
;;;95
;;;96
;;;97 if (OSIntNesting > 0) { /* See if called from ISR ... */
00002a 48ee LDR r0,|L1.996|
00002c 7800 LDRB r0,[r0,#0] ; OSIntNesting
00002e b108 CBZ r0,|L1.52|
;;;98 return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
000030 2000 MOVS r0,#0
;;;99 }
;;;100 OS_ENTER_CRITICAL();
;;;101 pevent = OSEventFreeList; /* Get next free event control block */
;;;102 if (OSEventFreeList != (OS_EVENT *)0) { /* See if pool of free ECB pool was empty */
;;;103 OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
;;;104 }
;;;105 OS_EXIT_CRITICAL();
;;;106 if (pevent != (OS_EVENT *)0) {
;;;107 pevent->OSEventType = OS_EVENT_TYPE_MBOX;
;;;108 pevent->OSEventCnt = 0;
;;;109 pevent->OSEventPtr = pmsg; /* Deposit message in event control block */
;;;110 #if OS_EVENT_NAME_SIZE > 1
;;;111 pevent->OSEventName[0] = '?';
;;;112 pevent->OSEventName[1] = OS_ASCII_NUL;
;;;113 #endif
;;;114 OS_EventWaitListInit(pevent);
;;;115 }
;;;116 return (pevent); /* Return pointer to event control block */
;;;117 }
000032 bd70 POP {r4-r6,pc}
|L1.52|
000034 f7fff7ff BL OS_CPU_SR_Save
000038 49eb LDR r1,|L1.1000|
00003a 680c LDR r4,[r1,#0] ; OSEventFreeList
00003c b10c CBZ r4,|L1.66|
00003e 6862 LDR r2,[r4,#4]
000040 600a STR r2,[r1,#0] ; OSEventFreeList
|L1.66|
000042 f7fff7ff BL OS_CPU_SR_Restore
000046 b154 CBZ r4,|L1.94|
000048 2001 MOVS r0,#1
00004a 7020 STRB r0,[r4,#0]
00004c 2000 MOVS r0,#0
00004e 8120 STRH r0,[r4,#8]
000050 6065 STR r5,[r4,#4]
000052 213f MOVS r1,#0x3f
000054 73e1 STRB r1,[r4,#0xf]
000056 7420 STRB r0,[r4,#0x10]
000058 4620 MOV r0,r4
00005a f7fff7ff BL OS_EventWaitListInit
|L1.94|
00005e 4620 MOV r0,r4
000060 bd70 POP {r4-r6,pc}
;;;118 /*$PAGE*/
ENDP
OSMboxDel PROC
;;;156 OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
;;;157 {
000062 e92de92d PUSH {r4-r12,lr}
000066 4604 MOV r4,r0
000068 468b MOV r11,r1
00006a 4615 MOV r5,r2
;;;158 BOOLEAN tasks_waiting;
;;;159 OS_EVENT *pevent_return;
;;;160 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;161 OS_CPU_SR cpu_sr = 0;
;;;162 #endif
;;;163
;;;164
;;;165
;;;166 #if OS_ARG_CHK_EN > 0
;;;167 if (perr == (INT8U *)0) { /* Validate 'perr' */
00006c b915 CBNZ r5,|L1.116|
;;;168 return (pevent);
00006e 4620 MOV r0,r4
000070 e8bde8bd POP {r4-r12,pc}
|L1.116|
;;;169 }
;;;170 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
000074 b924 CBNZ r4,|L1.128|
;;;171 *perr = OS_ERR_PEVENT_NULL;
000076 2004 MOVS r0,#4
000078 7028 STRB r0,[r5,#0]
;;;172 return (pevent);
00007a 4620 MOV r0,r4
00007c e8bde8bd POP {r4-r12,pc}
|L1.128|
;;;173 }
;;;174 #endif
;;;175 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
000080 7820 LDRB r0,[r4,#0]
000082 2801 CMP r0,#1
000084 d004 BEQ |L1.144|
;;;176 *perr = OS_ERR_EVENT_TYPE;
000086 2001 MOVS r0,#1
000088 7028 STRB r0,[r5,#0]
;;;177 return (pevent);
00008a 4620 MOV r0,r4
00008c e8bde8bd POP {r4-r12,pc}
|L1.144|
;;;178 }
;;;179 if (OSIntNesting > 0) { /* See if called from ISR ... */
000090 48d4 LDR r0,|L1.996|
000092 7800 LDRB r0,[r0,#0] ; OSIntNesting
000094 b120 CBZ r0,|L1.160|
;;;180 *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
000096 200f MOVS r0,#0xf
000098 7028 STRB r0,[r5,#0]
;;;181 return (pevent);
00009a 4620 MOV r0,r4
00009c e8bde8bd POP {r4-r12,pc}
|L1.160|
;;;182 }
;;;183 OS_ENTER_CRITICAL();
0000a0 f7fff7ff BL OS_CPU_SR_Save
0000a4 4682 MOV r10,r0
;;;184 if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on mailbox */
0000a6 7aa0 LDRB r0,[r4,#0xa]
0000a8 b108 CBZ r0,|L1.174|
;;;185 tasks_waiting = OS_TRUE; /* Yes */
0000aa 2601 MOVS r6,#1
0000ac e000 B |L1.176|
|L1.174|
;;;186 } else {
;;;187 tasks_waiting = OS_FALSE; /* No */
0000ae 2600 MOVS r6,#0
|L1.176|
;;;188 }
;;;189 switch (opt) {
0000b0 273f MOVS r7,#0x3f
0000b2 f8dff8df LDR r8,|L1.1000|
0000b6 f04ff04f MOV r9,#0
0000ba f1bbf1bb CMP r11,#0
0000be d004 BEQ |L1.202|
0000c0 f1bbf1bb CMP r11,#1
0000c4 d13f BNE |L1.326|
0000c6 b330 CBZ r0,|L1.278|
;;;190 case OS_DEL_NO_PEND: /* Delete mailbox only if no task waiting */
;;;191 if (tasks_waiting == OS_FALSE) {
;;;192 #if OS_EVENT_NAME_SIZE > 1
;;;193 pevent->OSEventName[0] = '?'; /* Unknown name */
;;;194 pevent->OSEventName[1] = OS_ASCII_NUL;
;;;195 #endif
;;;196 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;197 pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
;;;198 pevent->OSEventCnt = 0;
;;;199 OSEventFreeList = pevent; /* Get next free event control block */
;;;200 OS_EXIT_CRITICAL();
;;;201 *perr = OS_ERR_NONE;
;;;202 pevent_return = (OS_EVENT *)0; /* Mailbox has been deleted */
;;;203 } else {
;;;204 OS_EXIT_CRITICAL();
;;;205 *perr = OS_ERR_TASK_WAITING;
;;;206 pevent_return = pevent;
;;;207 }
;;;208 break;
;;;209
;;;210 case OS_DEL_ALWAYS: /* Always delete the mailbox */
;;;211 while (pevent->OSEventGrp != 0) { /* Ready ALL tasks waiting for mailbox */
0000c8 e01c B |L1.260|
|L1.202|
0000ca b99e CBNZ r6,|L1.244|
0000cc 73e7 STRB r7,[r4,#0xf]
0000ce f884f884 STRB r9,[r4,#0x10]
0000d2 f884f884 STRB r9,[r4,#0]
0000d6 f8d8f8d8 LDR r0,[r8,#0] ; OSEventFreeList
0000da 6060 STR r0,[r4,#4]
0000dc f8a4f8a4 STRH r9,[r4,#8]
0000e0 f8c8f8c8 STR r4,[r8,#0] ; OSEventFreeList
0000e4 4650 MOV r0,r10
0000e6 f7fff7ff BL OS_CPU_SR_Restore
0000ea f885f885 STRB r9,[r5,#0]
0000ee 2000 MOVS r0,#0
0000f0 e8bde8bd POP {r4-r12,pc}
|L1.244|
0000f4 4650 MOV r0,r10
0000f6 f7fff7ff BL OS_CPU_SR_Restore
0000fa 2049 MOVS r0,#0x49
0000fc 7028 STRB r0,[r5,#0]
0000fe 4620 MOV r0,r4
000100 e8bde8bd POP {r4-r12,pc}
|L1.260|
000104 2300 MOVS r3,#0
000106 2202 MOVS r2,#2
000108 4619 MOV r1,r3
00010a 4620 MOV r0,r4
00010c f7fff7ff BL OS_EventTaskRdy
000110 7aa0 LDRB r0,[r4,#0xa]
000112 2800 CMP r0,#0
000114 d1f6 BNE |L1.260|
|L1.278|
;;;212 (void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_MBOX, OS_STAT_PEND_OK);
;;;213 }
;;;214 #if OS_EVENT_NAME_SIZE > 1
;;;215 pevent->OSEventName[0] = '?'; /* Unknown name */
000116 73e7 STRB r7,[r4,#0xf]
;;;216 pevent->OSEventName[1] = OS_ASCII_NUL;
000118 f884f884 STRB r9,[r4,#0x10]
;;;217 #endif
;;;218 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
00011c f884f884 STRB r9,[r4,#0]
;;;219 pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
000120 f8d8f8d8 LDR r0,[r8,#0] ; OSEventFreeList
000124 6060 STR r0,[r4,#4]
;;;220 pevent->OSEventCnt = 0;
000126 f8a4f8a4 STRH r9,[r4,#8]
;;;221 OSEventFreeList = pevent; /* Get next free event control block */
00012a f8c8f8c8 STR r4,[r8,#0] ; OSEventFreeList
;;;222 OS_EXIT_CRITICAL();
00012e 4650 MOV r0,r10
000130 f7fff7ff BL OS_CPU_SR_Restore
;;;223 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
000134 2e01 CMP r6,#1
000136 d101 BNE |L1.316|
;;;224 OS_Sched(); /* Find highest priority task ready to run */
000138 f7fff7ff BL OS_Sched
|L1.316|
;;;225 }
;;;226 *perr = OS_ERR_NONE;
00013c f885f885 STRB r9,[r5,#0]
;;;227 pevent_return = (OS_EVENT *)0; /* Mailbox has been deleted */
000140 2000 MOVS r0,#0
000142 e8bde8bd POP {r4-r12,pc}
|L1.326|
;;;228 break;
;;;229
;;;230 default:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -