📄 os_mbox.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\os_mbox.o --depend=.\output\os_mbox.d --device=DARMSTM --apcs=interwork -O1 -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 -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\os_mbox.crf ..\..\..\..\..\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' */
;;;58 return ((void *)0);
;;;59 }
;;;60 #endif
;;;61 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
000004 7820 LDRB r0,[r4,#0]
000006 2801 CMP r0,#1
000008 d001 BEQ |L1.14|
;;;62 return ((void *)0);
00000a 2000 MOVS r0,#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 }
00000c bd70 POP {r4-r6,pc}
|L1.14|
00000e f7fff7ff BL OS_CPU_SR_Save
000012 6865 LDR r5,[r4,#4] ;65
000014 2100 MOVS r1,#0 ;66
000016 6061 STR r1,[r4,#4] ;66
000018 f7fff7ff BL OS_CPU_SR_Restore
00001c 4628 MOV r0,r5 ;68
00001e bd70 POP {r4-r6,pc}
;;;70 #endif
ENDP
OSMboxCreate PROC
;;;88 OS_EVENT *OSMboxCreate (void *pmsg)
;;;89 {
000020 b570 PUSH {r4-r6,lr}
000022 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 ... */
000024 48d2 LDR r0,|L1.880|
000026 7800 LDRB r0,[r0,#0] ; OSIntNesting
000028 b108 CBZ r0,|L1.46|
;;;98 return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
00002a 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 }
00002c bd70 POP {r4-r6,pc}
|L1.46|
00002e f7fff7ff BL OS_CPU_SR_Save
000032 49d0 LDR r1,|L1.884|
000034 680c LDR r4,[r1,#0] ;101 ; OSEventFreeList
000036 b10c CBZ r4,|L1.60|
000038 6862 LDR r2,[r4,#4] ;103
00003a 600a STR r2,[r1,#0] ;103 ; OSEventFreeList
|L1.60|
00003c f7fff7ff BL OS_CPU_SR_Restore
000040 b154 CBZ r4,|L1.88|
000042 2001 MOVS r0,#1 ;107
000044 7020 STRB r0,[r4,#0] ;107
000046 2000 MOVS r0,#0 ;108
000048 8120 STRH r0,[r4,#8] ;108
00004a 6065 STR r5,[r4,#4] ;109
00004c 213f MOVS r1,#0x3f ;111
00004e 73e1 STRB r1,[r4,#0xf] ;111
000050 7420 STRB r0,[r4,#0x10] ;112
000052 4620 MOV r0,r4 ;114
000054 f7fff7ff BL OS_EventWaitListInit
|L1.88|
000058 4620 MOV r0,r4 ;116
00005a bd70 POP {r4-r6,pc}
;;;118 /*$PAGE*/
ENDP
OSMboxDel PROC
;;;156 OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *perr)
;;;157 {
00005c e92de92d PUSH {r4-r12,lr}
000060 4604 MOV r4,r0
000062 468b MOV r11,r1
000064 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' */
;;;168 return (pevent);
;;;169 }
;;;170 if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */
;;;171 *perr = OS_ERR_PEVENT_NULL;
;;;172 return (pevent);
;;;173 }
;;;174 #endif
;;;175 if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { /* Validate event block type */
000066 7820 LDRB r0,[r4,#0]
000068 2801 CMP r0,#1
00006a d004 BEQ |L1.118|
;;;176 *perr = OS_ERR_EVENT_TYPE;
00006c 2001 MOVS r0,#1
00006e 7028 STRB r0,[r5,#0]
;;;177 return (pevent);
000070 4620 MOV r0,r4
|L1.114|
;;;178 }
;;;179 if (OSIntNesting > 0) { /* See if called from ISR ... */
;;;180 *perr = OS_ERR_DEL_ISR; /* ... can't DELETE from an ISR */
;;;181 return (pevent);
;;;182 }
;;;183 OS_ENTER_CRITICAL();
;;;184 if (pevent->OSEventGrp != 0) { /* See if any tasks waiting on mailbox */
;;;185 tasks_waiting = OS_TRUE; /* Yes */
;;;186 } else {
;;;187 tasks_waiting = OS_FALSE; /* No */
;;;188 }
;;;189 switch (opt) {
;;;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 */
;;;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 */
;;;216 pevent->OSEventName[1] = OS_ASCII_NUL;
;;;217 #endif
;;;218 pevent->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;219 pevent->OSEventPtr = OSEventFreeList; /* Return Event Control Block to free list */
;;;220 pevent->OSEventCnt = 0;
;;;221 OSEventFreeList = pevent; /* Get next free event control block */
;;;222 OS_EXIT_CRITICAL();
;;;223 if (tasks_waiting == OS_TRUE) { /* Reschedule only if task(s) were waiting */
;;;224 OS_Sched(); /* Find highest priority task ready to run */
;;;225 }
;;;226 *perr = OS_ERR_NONE;
;;;227 pevent_return = (OS_EVENT *)0; /* Mailbox has been deleted */
;;;228 break;
;;;229
;;;230 default:
;;;231 OS_EXIT_CRITICAL();
;;;232 *perr = OS_ERR_INVALID_OPT;
;;;233 pevent_return = pevent;
;;;234 break;
;;;235 }
;;;236 return (pevent_return);
;;;237 }
000072 e8bde8bd POP {r4-r12,pc}
|L1.118|
000076 48be LDR r0,|L1.880|
000078 7800 LDRB r0,[r0,#0] ;179 ; OSIntNesting
00007a b118 CBZ r0,|L1.132|
00007c 200f MOVS r0,#0xf ;180
00007e 7028 STRB r0,[r5,#0] ;180
000080 4620 MOV r0,r4 ;181
000082 e7f6 B |L1.114|
|L1.132|
000084 f7fff7ff BL OS_CPU_SR_Save
000088 4607 MOV r7,r0 ;183
00008a 7aa0 LDRB r0,[r4,#0xa] ;184
00008c b108 CBZ r0,|L1.146|
00008e 2601 MOVS r6,#1 ;185
000090 e000 B |L1.148|
|L1.146|
000092 2600 MOVS r6,#0 ;187
|L1.148|
000094 f8dff8df LDR r9,|L1.884|
000098 f04ff04f MOV r8,#0x3f ;189
00009c f04ff04f MOV r10,#0 ;189
0000a0 f1bbf1bb CMP r11,#0 ;189
0000a4 d003 BEQ |L1.174|
0000a6 f1bbf1bb CMP r11,#1 ;189
0000aa d13d BNE |L1.296|
0000ac e021 B |L1.242|
|L1.174|
0000ae b99e CBNZ r6,|L1.216|
0000b0 f884f884 STRB r8,[r4,#0xf] ;193
0000b4 f884f884 STRB r10,[r4,#0x10] ;194
0000b8 f884f884 STRB r10,[r4,#0] ;196
0000bc f8d9f8d9 LDR r0,[r9,#0] ;197 ; OSEventFreeList
0000c0 6060 STR r0,[r4,#4] ;197
0000c2 f8a4f8a4 STRH r10,[r4,#8] ;198
0000c6 f8c9f8c9 STR r4,[r9,#0] ;199 ; OSEventFreeList
0000ca 4638 MOV r0,r7 ;200
0000cc f7fff7ff BL OS_CPU_SR_Restore
0000d0 f885f885 STRB r10,[r5,#0] ;201
0000d4 2000 MOVS r0,#0 ;202
0000d6 e7cc B |L1.114|
|L1.216|
0000d8 4638 MOV r0,r7 ;204
0000da f7fff7ff BL OS_CPU_SR_Restore
0000de 2049 MOVS r0,#0x49 ;205
0000e0 7028 STRB r0,[r5,#0] ;205
0000e2 4620 MOV r0,r4 ;206
0000e4 e7c5 B |L1.114|
|L1.230|
0000e6 2300 MOVS r3,#0 ;212
0000e8 2202 MOVS r2,#2 ;212
0000ea 4619 MOV r1,r3 ;212
0000ec 4620 MOV r0,r4 ;212
0000ee f7fff7ff BL OS_EventTaskRdy
|L1.242|
0000f2 7aa0 LDRB r0,[r4,#0xa] ;211
0000f4 2800 CMP r0,#0 ;211
0000f6 d1f6 BNE |L1.230|
0000f8 f884f884 STRB r8,[r4,#0xf] ;215
0000fc f884f884 STRB r10,[r4,#0x10] ;216
000100 f884f884 STRB r10,[r4,#0] ;218
000104 f8d9f8d9 LDR r0,[r9,#0] ;219 ; OSEventFreeList
000108 6060 STR r0,[r4,#4] ;219
00010a f8a4f8a4 STRH r10,[r4,#8] ;220
00010e f8c9f8c9 STR r4,[r9,#0] ;221 ; OSEventFreeList
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -