📄 os_flag.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\os_flag.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips ..\Source\OS_FLAG.C]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
OSFlagAccept PROC
;;;78 OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err)
;;;79 {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 e1a04000 MOV r4,r0
000008 e1a05001 MOV r5,r1
00000c e1a06002 MOV r6,r2
000010 e1a07003 MOV r7,r3
;;;80 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;81 OS_CPU_SR cpu_sr;
;;;82 #endif
;;;83 OS_FLAGS flags_cur;
;;;84 OS_FLAGS flags_rdy;
;;;85 BOOLEAN consume;
;;;86
;;;87
;;;88 #if OS_ARG_CHK_EN > 0
;;;89 if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
000014 e3540000 CMP r4,#0
000018 1a000003 BNE |L1.44|
;;;90 *err = OS_FLAG_INVALID_PGRP;
00001c e3a00096 MOV r0,#0x96
000020 e5c70000 STRB r0,[r7,#0]
;;;91 return ((OS_FLAGS)0);
000024 e3a00000 MOV r0,#0
;;;92 }
;;;93 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
;;;94 *err = OS_ERR_EVENT_TYPE;
;;;95 return ((OS_FLAGS)0);
;;;96 }
;;;97 #endif
;;;98 if (wait_type & OS_FLAG_CONSUME) { /* See if we need to consume the flags */
;;;99 wait_type &= ~OS_FLAG_CONSUME;
;;;100 consume = TRUE;
;;;101 } else {
;;;102 consume = FALSE;
;;;103 }
;;;104 /*$PAGE*/
;;;105 *err = OS_NO_ERR; /* Assume NO error until proven otherwise. */
;;;106 OS_ENTER_CRITICAL();
;;;107 switch (wait_type) {
;;;108 case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
;;;109 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
;;;110 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
;;;111 if (consume == TRUE) { /* See if we need to consume the flags */
;;;112 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
;;;113 }
;;;114 } else {
;;;115 *err = OS_FLAG_ERR_NOT_RDY;
;;;116 }
;;;117 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
;;;118 OS_EXIT_CRITICAL();
;;;119 break;
;;;120
;;;121 case OS_FLAG_WAIT_SET_ANY:
;;;122 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
;;;123 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
;;;124 if (consume == TRUE) { /* See if we need to consume the flags */
;;;125 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
;;;126 }
;;;127 } else {
;;;128 *err = OS_FLAG_ERR_NOT_RDY;
;;;129 }
;;;130 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
;;;131 OS_EXIT_CRITICAL();
;;;132 break;
;;;133
;;;134 #if OS_FLAG_WAIT_CLR_EN > 0
;;;135 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
;;;136 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
;;;137 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
;;;138 if (consume == TRUE) { /* See if we need to consume the flags */
;;;139 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
;;;140 }
;;;141 } else {
;;;142 *err = OS_FLAG_ERR_NOT_RDY;
;;;143 }
;;;144 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
;;;145 OS_EXIT_CRITICAL();
;;;146 break;
;;;147
;;;148 case OS_FLAG_WAIT_CLR_ANY:
;;;149 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
;;;150 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
;;;151 if (consume == TRUE) { /* See if we need to consume the flags */
;;;152 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
;;;153 }
;;;154 } else {
;;;155 *err = OS_FLAG_ERR_NOT_RDY;
;;;156 }
;;;157 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
;;;158 OS_EXIT_CRITICAL();
;;;159 break;
;;;160 #endif
;;;161
;;;162 default:
;;;163 OS_EXIT_CRITICAL();
;;;164 flags_cur = (OS_FLAGS)0;
;;;165 *err = OS_FLAG_ERR_WAIT_TYPE;
;;;166 break;
;;;167 }
;;;168 return (flags_cur);
;;;169 }
|L1.40|
000028 e8bd87f0 POP {r4-r10,pc}
|L1.44|
00002c e5d40000 LDRB r0,[r4,#0] ;93
000030 e3500005 CMP r0,#5 ;93
000034 0a000003 BEQ |L1.72| ;93
000038 e3a00001 MOV r0,#1 ;94
00003c e5c70000 STRB r0,[r7,#0] ;94
000040 e3a00000 MOV r0,#0 ;95
000044 eafffff7 B |L1.40| ;95
|L1.72|
000048 e3160080 TST r6,#0x80 ;98
00004c 0a000002 BEQ |L1.92| ;98
000050 e3c66080 BIC r6,r6,#0x80 ;99
000054 e3a0a001 MOV r10,#1 ;100
000058 ea000000 B |L1.96| ;100
|L1.92|
00005c e3a0a000 MOV r10,#0 ;102
|L1.96|
000060 e3a00000 MOV r0,#0 ;105
000064 e5c70000 STRB r0,[r7,#0] ;105
000068 ef000002 SVC 0x2 ; formerly SWI ;106
00006c e3560000 CMP r6,#0 ;107
000070 0a000026 BEQ |L1.272| ;107
000074 e3560001 CMP r6,#1 ;107
000078 0a000036 BEQ |L1.344| ;107
00007c e3560002 CMP r6,#2 ;107
000080 0a000002 BEQ |L1.144| ;107
000084 e3560003 CMP r6,#3 ;107
000088 1a000044 BNE |L1.416| ;107
00008c ea00000f B |L1.208| ;107
|L1.144|
000090 e1a00000 MOV r0,r0 ;108
000094 e1d400b8 LDRH r0,[r4,#8] ;109
000098 e0008005 AND r8,r0,r5 ;109
00009c e1580005 CMP r8,r5 ;110
0000a0 1a000005 BNE |L1.188| ;110
0000a4 e35a0001 CMP r10,#1 ;111
0000a8 1a000005 BNE |L1.196| ;111
0000ac e1d400b8 LDRH r0,[r4,#8] ;112
0000b0 e1c00008 BIC r0,r0,r8 ;112
0000b4 e1c400b8 STRH r0,[r4,#8] ;112
0000b8 ea000001 B |L1.196| ;112
|L1.188|
0000bc e3a00098 MOV r0,#0x98 ;115
0000c0 e5c70000 STRB r0,[r7,#0] ;115
|L1.196|
0000c4 e1d490b8 LDRH r9,[r4,#8] ;117
0000c8 ef000003 SVC 0x3 ; formerly SWI ;118
0000cc ea000039 B |L1.440| ;119
|L1.208|
0000d0 e1a00000 MOV r0,r0 ;121
0000d4 e1d400b8 LDRH r0,[r4,#8] ;122
0000d8 e0008005 AND r8,r0,r5 ;122
0000dc e3580000 CMP r8,#0 ;123
0000e0 0a000005 BEQ |L1.252| ;123
0000e4 e35a0001 CMP r10,#1 ;124
0000e8 1a000005 BNE |L1.260| ;124
0000ec e1d400b8 LDRH r0,[r4,#8] ;125
0000f0 e1c00008 BIC r0,r0,r8 ;125
0000f4 e1c400b8 STRH r0,[r4,#8] ;125
0000f8 ea000001 B |L1.260| ;125
|L1.252|
0000fc e3a00098 MOV r0,#0x98 ;128
000100 e5c70000 STRB r0,[r7,#0] ;128
|L1.260|
000104 e1d490b8 LDRH r9,[r4,#8] ;130
000108 ef000003 SVC 0x3 ; formerly SWI ;131
00010c ea000029 B |L1.440| ;132
|L1.272|
000110 e1a00000 MOV r0,r0 ;135
000114 e1d400b8 LDRH r0,[r4,#8] ;136
000118 e1c50000 BIC r0,r5,r0 ;136
00011c e1a08800 LSL r8,r0,#16 ;136
000120 e1a08828 LSR r8,r8,#16 ;136
000124 e1580005 CMP r8,r5 ;137
000128 1a000005 BNE |L1.324| ;137
00012c e35a0001 CMP r10,#1 ;138
000130 1a000005 BNE |L1.332| ;138
000134 e1d400b8 LDRH r0,[r4,#8] ;139
000138 e1800008 ORR r0,r0,r8 ;139
00013c e1c400b8 STRH r0,[r4,#8] ;139
000140 ea000001 B |L1.332| ;139
|L1.324|
000144 e3a00098 MOV r0,#0x98 ;142
000148 e5c70000 STRB r0,[r7,#0] ;142
|L1.332|
00014c e1d490b8 LDRH r9,[r4,#8] ;144
000150 ef000003 SVC 0x3 ; formerly SWI ;145
000154 ea000017 B |L1.440| ;146
|L1.344|
000158 e1a00000 MOV r0,r0 ;148
00015c e1d400b8 LDRH r0,[r4,#8] ;149
000160 e1c50000 BIC r0,r5,r0 ;149
000164 e1a08800 LSL r8,r0,#16 ;149
000168 e1a08828 LSR r8,r8,#16 ;149
00016c e3580000 CMP r8,#0 ;150
000170 0a000005 BEQ |L1.396| ;150
000174 e35a0001 CMP r10,#1 ;151
000178 1a000005 BNE |L1.404| ;151
00017c e1d400b8 LDRH r0,[r4,#8] ;152
000180 e1800008 ORR r0,r0,r8 ;152
000184 e1c400b8 STRH r0,[r4,#8] ;152
000188 ea000001 B |L1.404| ;152
|L1.396|
00018c e3a00098 MOV r0,#0x98 ;155
000190 e5c70000 STRB r0,[r7,#0] ;155
|L1.404|
000194 e1d490b8 LDRH r9,[r4,#8] ;157
000198 ef000003 SVC 0x3 ; formerly SWI ;158
00019c ea000005 B |L1.440| ;159
|L1.416|
0001a0 e1a00000 MOV r0,r0 ;162
0001a4 ef000003 SVC 0x3 ; formerly SWI ;163
0001a8 e3a09000 MOV r9,#0 ;164
0001ac e3a00097 MOV r0,#0x97 ;165
0001b0 e5c70000 STRB r0,[r7,#0] ;165
0001b4 e1a00000 MOV r0,r0 ;166
|L1.440|
0001b8 e1a00000 MOV r0,r0 ;119
0001bc e1a00009 MOV r0,r9 ;168
0001c0 eaffff98 B |L1.40| ;168
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -