os_flag.txt
来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 1,195 行 · 第 1/5 页
TXT
1,195 行
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_flag.o --depend=.\rvmdk\os_flag.d --device=DARMP --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uC-CPU -I..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\uC-LIB -I..\..\..\..\uC-TCPIP\IF -I..\..\..\..\uC-TCPIP\IF\Ether -I..\..\..\..\uC-TCPIP\NIC\ETHER\LPC2378 -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY\DP83848 -I..\..\..\..\uC-TCPIP\OS\uCOS-II -I..\..\..\..\uC-TCPIP\Source -I..\..\..\..\uC-LCD\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\TCPIP\Source -I..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -Ie:\Keil_ARM\ARM\INC\Philips -D__IN_CHIP --omf_browse=.\rvmdk\os_flag.crf ..\Source\OS_FLAG.C]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
OSFlagAccept PROC
;;;78 OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err)
;;;79 {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 e1a04000 MOV r4,r0
000008 e1a06001 MOV r6,r1
00000c e1a08002 MOV r8,r2
000010 e1a05003 MOV r5,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 1a000004 BNE |L1.48|
;;;90 *err = OS_FLAG_INVALID_PGRP;
00001c e3a00096 MOV r0,#0x96
000020 e5c50000 STRB r0,[r5,#0]
;;;91 return ((OS_FLAGS)0);
000024 e3a00000 MOV r0,#0
|L1.40|
000028 e8bd41f0 POP {r4-r8,lr}
;;;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 }
00002c e12fff1e BX lr
|L1.48|
000030 e5d40000 LDRB r0,[r4,#0] ;93
000034 e3500005 CMP r0,#5 ;93
000038 0a000003 BEQ |L1.76|
00003c e3a00001 MOV r0,#1 ;94
000040 e5c50000 STRB r0,[r5,#0] ;94
000044 e3a00000 MOV r0,#0 ;95
000048 eafffff6 B |L1.40|
|L1.76|
00004c e3180080 TST r8,#0x80 ;98
000050 0a000002 BEQ |L1.96|
000054 e3c88080 BIC r8,r8,#0x80 ;99
000058 e3a07001 MOV r7,#1 ;100
00005c ea000000 B |L1.100|
|L1.96|
000060 e3a07000 MOV r7,#0 ;102
|L1.100|
000064 e3a00000 MOV r0,#0 ;105
000068 e5c50000 STRB r0,[r5,#0] ;105
00006c ef000002 SVC #0x2 ;106
000070 e3580000 CMP r8,#0 ;107
000074 e3a02098 MOV r2,#0x98 ;106
000078 0a00001f BEQ |L1.252|
00007c e3580001 CMP r8,#1 ;107
000080 0a00002a BEQ |L1.304|
000084 e3580002 CMP r8,#2 ;107
000088 0a00000a BEQ |L1.184|
00008c e3580003 CMP r8,#3 ;107
000090 1a000033 BNE |L1.356|
000094 e1d410b8 LDRH r1,[r4,#8] ;122
000098 e0010006 AND r0,r1,r6 ;122
00009c e3500000 CMP r0,#0 ;123
0000a0 0a000011 BEQ |L1.236|
0000a4 e3570001 CMP r7,#1 ;124
0000a8 1a000010 BNE |L1.240|
0000ac e1c10000 BIC r0,r1,r0 ;125
0000b0 e1c400b8 STRH r0,[r4,#8] ;125
0000b4 ea00000d B |L1.240|
|L1.184|
0000b8 e1d410b8 LDRH r1,[r4,#8] ;109
0000bc e0010006 AND r0,r1,r6 ;109
0000c0 e1500006 CMP r0,r6 ;110
0000c4 1a000004 BNE |L1.220|
0000c8 e3570001 CMP r7,#1 ;111
0000cc 1a000003 BNE |L1.224|
0000d0 e1c10000 BIC r0,r1,r0 ;112
0000d4 e1c400b8 STRH r0,[r4,#8] ;112
0000d8 ea000000 B |L1.224|
|L1.220|
0000dc e5c52000 STRB r2,[r5,#0] ;115
|L1.224|
0000e0 e1d440b8 LDRH r4,[r4,#8] ;117
0000e4 ef000003 SVC #0x3 ;118
0000e8 ea000021 B |L1.372|
|L1.236|
0000ec e5c52000 STRB r2,[r5,#0] ;128
|L1.240|
0000f0 e1d440b8 LDRH r4,[r4,#8] ;130
0000f4 ef000003 SVC #0x3 ;131
0000f8 ea00001d B |L1.372|
|L1.252|
0000fc e1d410b8 LDRH r1,[r4,#8] ;136
000100 e1c60001 BIC r0,r6,r1 ;136
000104 e1500006 CMP r0,r6 ;137
000108 1a000004 BNE |L1.288|
00010c e3570001 CMP r7,#1 ;138
000110 1a000003 BNE |L1.292|
000114 e1800001 ORR r0,r0,r1 ;139
000118 e1c400b8 STRH r0,[r4,#8] ;139
00011c ea000000 B |L1.292|
|L1.288|
000120 e5c52000 STRB r2,[r5,#0] ;142
|L1.292|
000124 e1d440b8 LDRH r4,[r4,#8] ;144
000128 ef000003 SVC #0x3 ;145
00012c ea000010 B |L1.372|
|L1.304|
000130 e1d410b8 LDRH r1,[r4,#8] ;149
000134 e1c60001 BIC r0,r6,r1 ;149
000138 e3500000 CMP r0,#0 ;150
00013c 0a000004 BEQ |L1.340|
000140 e3570001 CMP r7,#1 ;151
000144 1a000003 BNE |L1.344|
000148 e1800001 ORR r0,r0,r1 ;152
00014c e1c400b8 STRH r0,[r4,#8] ;152
000150 ea000000 B |L1.344|
|L1.340|
000154 e5c52000 STRB r2,[r5,#0] ;155
|L1.344|
000158 e1d440b8 LDRH r4,[r4,#8] ;157
00015c ef000003 SVC #0x3 ;158
000160 ea000003 B |L1.372|
|L1.356|
000164 ef000003 SVC #0x3 ;163
000168 e3a04000 MOV r4,#0 ;164
00016c e3a00097 MOV r0,#0x97 ;165
000170 e5c50000 STRB r0,[r5,#0] ;165
|L1.372|
000174 e1a00004 MOV r0,r4 ;168
000178 eaffffaa B |L1.40|
;;;170 #endif
ENDP
OSFlagCreate PROC
;;;193 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *err)
;;;194 {
00017c e92d4070 PUSH {r4-r6,lr}
000180 e1a06000 MOV r6,r0
000184 e1a05001 MOV r5,r1
;;;195 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;196 OS_CPU_SR cpu_sr;
;;;197 #endif
;;;198 OS_FLAG_GRP *pgrp;
;;;199
;;;200
;;;201 if (OSIntNesting > 0) { /* See if called from ISR ... */
000188 e59f07f0 LDR r0,|L1.2432|
00018c e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000190 e3500000 CMP r0,#0
000194 0a000004 BEQ |L1.428|
;;;202 *err = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
000198 e3a0008d MOV r0,#0x8d
00019c e5c50000 STRB r0,[r5,#0]
;;;203 return ((OS_FLAG_GRP *)0);
0001a0 e3a00000 MOV r0,#0
|L1.420|
0001a4 e8bd4070 POP {r4-r6,lr}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?