📄 os_flag.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_flag.o --depend=.\rvmdk\os_flag.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2000\IAR -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -IC:\Keil\ARM\INC\Philips --omf_browse=.\rvmdk\os_flag.crf ..\..\..\..\..\uCOS-II\Source\os_flag.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
OSFlagAccept PROC
;;;92 OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *perr)
;;;93 {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 e1a05000 MOV r5,r0
;;;94 OS_FLAGS flags_rdy;
;;;95 INT8U result;
;;;96 BOOLEAN consume;
;;;97 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;98 OS_CPU_SR cpu_sr = 0;
;;;99 #endif
;;;100
;;;101
;;;102
;;;103 #if OS_ARG_CHK_EN > 0
;;;104 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;105 return ((OS_FLAGS)0);
;;;106 }
;;;107 if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
;;;108 *perr = OS_ERR_FLAG_INVALID_PGRP;
;;;109 return ((OS_FLAGS)0);
;;;110 }
;;;111 #endif
;;;112 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
000008 e5d00000 LDRB r0,[r0,#0]
00000c e1a06003 MOV r6,r3 ;93
000010 e1a07001 MOV r7,r1 ;93
000014 e3500005 CMP r0,#5
;;;113 *perr = OS_ERR_EVENT_TYPE;
000018 13a00001 MOVNE r0,#1
00001c 15c60000 STRBNE r0,[r6,#0]
000020 e1a04002 MOV r4,r2 ;93
;;;114 return ((OS_FLAGS)0);
000024 13a00000 MOVNE r0,#0
000028 1a000031 BNE |L1.244|
;;;115 }
;;;116 result = (INT8U)(wait_type & OS_FLAG_CONSUME);
00002c e3140080 TST r4,#0x80
;;;117 if (result != (INT8U)0) { /* See if we need to consume the flags */
;;;118 wait_type &= ~OS_FLAG_CONSUME;
;;;119 consume = OS_TRUE;
;;;120 } else {
;;;121 consume = OS_FALSE;
;;;122 }
;;;123 /*$PAGE*/
;;;124 *perr = OS_ERR_NONE; /* Assume NO error until proven otherwise. */
000030 e3a00000 MOV r0,#0
000034 03a08000 MOVEQ r8,#0 ;121
000038 13c44080 BICNE r4,r4,#0x80 ;118
00003c 13a08001 MOVNE r8,#1 ;119
000040 e5c60000 STRB r0,[r6,#0]
;;;125 OS_ENTER_CRITICAL();
000044 ebfffffe BL OS_CPU_SR_Save
;;;126 switch (wait_type) {
000048 e3540000 CMP r4,#0
00004c e3a02070 MOV r2,#0x70 ;125
000050 0a000013 BEQ |L1.164|
000054 e3540001 CMP r4,#1
000058 0a000016 BEQ |L1.184|
00005c e3540002 CMP r4,#2
000060 0a000008 BEQ |L1.136|
000064 e3540003 CMP r4,#3
000068 1a00001c BNE |L1.224|
;;;127 case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
;;;128 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
;;;129 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
;;;130 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;131 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
;;;132 }
;;;133 } else {
;;;134 *perr = OS_ERR_FLAG_NOT_RDY;
;;;135 }
;;;136 OS_EXIT_CRITICAL();
;;;137 break;
;;;138
;;;139 case OS_FLAG_WAIT_SET_ANY:
;;;140 flags_rdy = (OS_FLAGS)(pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
00006c e1d510b8 LDRH r1,[r5,#8]
000070 e0114007 ANDS r4,r1,r7
;;;141 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
000074 0a000017 BEQ |L1.216|
|L1.120|
;;;142 if (consume == OS_TRUE) { /* See if we need to consume the flags */
000078 e3580001 CMP r8,#1
00007c 01c11004 BICEQ r1,r1,r4 ;131
000080 0a000012 BEQ |L1.208|
000084 ea000004 B |L1.156|
|L1.136|
000088 e1d510b8 LDRH r1,[r5,#8] ;128
00008c e0014007 AND r4,r1,r7 ;128
000090 e1540007 CMP r4,r7 ;129
000094 0afffff7 BEQ |L1.120|
000098 ea00000e B |L1.216|
|L1.156|
00009c ebfffffe BL OS_CPU_SR_Restore
0000a0 ea000012 B |L1.240|
|L1.164|
;;;143 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
;;;144 }
;;;145 } else {
;;;146 *perr = OS_ERR_FLAG_NOT_RDY;
;;;147 }
;;;148 OS_EXIT_CRITICAL();
;;;149 break;
;;;150
;;;151 #if OS_FLAG_WAIT_CLR_EN > 0
;;;152 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
;;;153 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
0000a4 e1d510b8 LDRH r1,[r5,#8]
0000a8 e1c74001 BIC r4,r7,r1
;;;154 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
0000ac e1540007 CMP r4,r7
0000b0 1a000008 BNE |L1.216|
0000b4 ea000002 B |L1.196|
|L1.184|
;;;155 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;156 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
;;;157 }
;;;158 } else {
;;;159 *perr = OS_ERR_FLAG_NOT_RDY;
;;;160 }
;;;161 OS_EXIT_CRITICAL();
;;;162 break;
;;;163
;;;164 case OS_FLAG_WAIT_CLR_ANY:
;;;165 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
0000b8 e1d510b8 LDRH r1,[r5,#8]
0000bc e1d74001 BICS r4,r7,r1
;;;166 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
0000c0 0a000004 BEQ |L1.216|
|L1.196|
;;;167 if (consume == OS_TRUE) { /* See if we need to consume the flags */
0000c4 e3580001 CMP r8,#1
0000c8 1afffff3 BNE |L1.156|
;;;168 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
0000cc e1811004 ORR r1,r1,r4
|L1.208|
0000d0 e1c510b8 STRH r1,[r5,#8]
0000d4 eafffff0 B |L1.156|
|L1.216|
;;;169 }
;;;170 } else {
;;;171 *perr = OS_ERR_FLAG_NOT_RDY;
0000d8 e5c62000 STRB r2,[r6,#0]
0000dc eaffffee B |L1.156|
|L1.224|
;;;172 }
;;;173 OS_EXIT_CRITICAL();
;;;174 break;
;;;175 #endif
;;;176
;;;177 default:
;;;178 OS_EXIT_CRITICAL();
0000e0 ebfffffe BL OS_CPU_SR_Restore
;;;179 flags_rdy = (OS_FLAGS)0;
;;;180 *perr = OS_ERR_FLAG_WAIT_TYPE;
0000e4 e3a0006f MOV r0,#0x6f
0000e8 e3a04000 MOV r4,#0 ;179
0000ec e5c60000 STRB r0,[r6,#0]
|L1.240|
;;;181 break;
;;;182 }
;;;183 return (flags_rdy);
0000f0 e1a00004 MOV r0,r4
|L1.244|
0000f4 e8bd41f0 POP {r4-r8,lr}
;;;184 }
0000f8 e12fff1e BX lr
;;;185 #endif
ENDP
OSFlagCreate PROC
;;;208 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *perr)
;;;209 {
0000fc e92d4070 PUSH {r4-r6,lr}
000100 e1a06000 MOV r6,r0
;;;210 OS_FLAG_GRP *pgrp;
;;;211 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;212 OS_CPU_SR cpu_sr = 0;
;;;213 #endif
;;;214
;;;215
;;;216
;;;217 #if OS_ARG_CHK_EN > 0
;;;218 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;219 return ((OS_FLAG_GRP *)0);
;;;220 }
;;;221 #endif
;;;222 if (OSIntNesting > 0) { /* See if called from ISR ... */
000104 e59f07dc LDR r0,|L1.2280|
000108 e1a05001 MOV r5,r1 ;209
00010c e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000110 e3500000 CMP r0,#0
;;;223 *perr = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
000114 13a00010 MOVNE r0,#0x10
000118 15c50000 STRBNE r0,[r5,#0]
;;;224 return ((OS_FLAG_GRP *)0);
00011c 13a00000 MOVNE r0,#0
000120 1a000015 BNE |L1.380|
;;;225 }
;;;226 OS_ENTER_CRITICAL();
000124 ebfffffe BL OS_CPU_SR_Save
;;;227 pgrp = OSFlagFreeList; /* Get next free event flag */
000128 e59f17bc LDR r1,|L1.2284|
00012c e5914000 LDR r4,[r1,#0] ; OSFlagFreeList
;;;228 if (pgrp != (OS_FLAG_GRP *)0) { /* See if we have event flag groups available */
000130 e3540000 CMP r4,#0
000134 0a00000c BEQ |L1.364|
;;;229 /* Adjust free list */
;;;230 OSFlagFreeList = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
000138 e5942004 LDR r2,[r4,#4]
00013c e5812000 STR r2,[r1,#0] ; OSFlagFreeList
;;;231 pgrp->OSFlagType = OS_EVENT_TYPE_FLAG; /* Set to event flag group type */
000140 e3a01005 MOV r1,#5
000144 e5c41000 STRB r1,[r4,#0]
;;;232 pgrp->OSFlagFlags = flags; /* Set to desired initial value */
000148 e1c460b8 STRH r6,[r4,#8]
;;;233 pgrp->OSFlagWaitList = (void *)0; /* Clear list of tasks waiting on flags */
00014c e3a06000 MOV r6,#0
;;;234 #if OS_FLAG_NAME_SIZE > 1
;;;235 pgrp->OSFlagName[0] = '?';
000150 e3a0103f MOV r1,#0x3f
000154 e5846004 STR r6,[r4,#4]
000158 e5c4100a STRB r1,[r4,#0xa]
;;;236 pgrp->OSFlagName[1] = OS_ASCII_NUL;
00015c e5c4600b STRB r6,[r4,#0xb]
;;;237 #endif
;;;238 OS_EXIT_CRITICAL();
000160 ebfffffe BL OS_CPU_SR_Restore
;;;239 *perr = OS_ERR_NONE;
000164 e5c56000 STRB r6,[r5,#0]
000168 ea000002 B |L1.376|
|L1.364|
;;;240 } else {
;;;241 OS_EXIT_CRITICAL();
00016c ebfffffe BL OS_CPU_SR_Restore
;;;242 *perr = OS_ERR_FLAG_GRP_DEPLETED;
000170 e3a00072 MOV r0,#0x72
000174 e5c50000 STRB r0,[r5,#0]
|L1.376|
;;;243 }
;;;244 return (pgrp); /* Return pointer to event flag group */
000178 e1a00004 MOV r0,r4
|L1.380|
00017c e8bd4070 POP {r4-r6,lr}
;;;245 }
000180 e12fff1e BX lr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -