📄 os_flag.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_flag.o --depend=os_flag.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\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 *err)
;;;93 {
000000 e92d5ff0 PUSH {r4-r12,lr}
000004 e1a04000 MOV r4,r0
000008 e1a05001 MOV r5,r1
00000c e1a06002 MOV r6,r2
000010 e1a07003 MOV r7,r3
;;;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;
000014 e3a0b000 MOV r11,#0
;;;99 #endif
;;;100
;;;101
;;;102
;;;103 #if OS_ARG_CHK_EN > 0
;;;104 if (err == (INT8U *)0) { /* Validate 'err' */
000018 e3570000 CMP r7,#0
00001c 1a000002 BNE |L1.44|
;;;105 return ((OS_FLAGS)0);
000020 e3a00000 MOV r0,#0
|L1.36|
000024 e8bd5ff0 POP {r4-r12,lr}
;;;106 }
;;;107 if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
;;;108 *err = 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 */
;;;113 *err = OS_ERR_EVENT_TYPE;
;;;114 return ((OS_FLAGS)0);
;;;115 }
;;;116 result = (INT8U)(wait_type & OS_FLAG_CONSUME);
;;;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 *err = OS_ERR_NONE; /* Assume NO error until proven otherwise. */
;;;125 OS_ENTER_CRITICAL();
;;;126 switch (wait_type) {
;;;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 *err = 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 */
;;;141 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
;;;142 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;143 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
;;;144 }
;;;145 } else {
;;;146 *err = 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 */
;;;154 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
;;;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 *err = 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 */
;;;166 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
;;;167 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;168 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
;;;169 }
;;;170 } else {
;;;171 *err = OS_ERR_FLAG_NOT_RDY;
;;;172 }
;;;173 OS_EXIT_CRITICAL();
;;;174 break;
;;;175 #endif
;;;176
;;;177 default:
;;;178 OS_EXIT_CRITICAL();
;;;179 flags_rdy = (OS_FLAGS)0;
;;;180 *err = OS_ERR_FLAG_WAIT_TYPE;
;;;181 break;
;;;182 }
;;;183 return (flags_rdy);
;;;184 }
000028 e12fff1e BX lr
|L1.44|
00002c e3540000 CMP r4,#0
000030 1a000003 BNE |L1.68|
000034 e3a0006e MOV r0,#0x6e
000038 e5c70000 STRB r0,[r7,#0]
00003c e3a00000 MOV r0,#0
000040 eafffff7 B |L1.36|
|L1.68|
000044 e5d40000 LDRB r0,[r4,#0]
000048 e3500005 CMP r0,#5
00004c 0a000003 BEQ |L1.96|
000050 e3a00001 MOV r0,#1
000054 e5c70000 STRB r0,[r7,#0]
000058 e3a00000 MOV r0,#0
00005c eafffff0 B |L1.36|
|L1.96|
000060 e2069080 AND r9,r6,#0x80
000064 e3590000 CMP r9,#0
000068 0a000002 BEQ |L1.120|
00006c e3c66080 BIC r6,r6,#0x80
000070 e3a0a001 MOV r10,#1
000074 ea000000 B |L1.124|
|L1.120|
000078 e3a0a000 MOV r10,#0
|L1.124|
00007c e3a00000 MOV r0,#0
000080 e5c70000 STRB r0,[r7,#0]
000084 ebfffffe BL OS_CPU_SR_Save
000088 e1a0b000 MOV r11,r0
00008c e3560000 CMP r6,#0
000090 0a000026 BEQ |L1.304|
000094 e3560001 CMP r6,#1
000098 0a000034 BEQ |L1.368|
00009c e3560002 CMP r6,#2
0000a0 0a000002 BEQ |L1.176|
0000a4 e3560003 CMP r6,#3
0000a8 1a000040 BNE |L1.432|
0000ac ea00000f B |L1.240|
|L1.176|
0000b0 e1a00000 MOV r0,r0
0000b4 e1d400b8 LDRH r0,[r4,#8]
0000b8 e0008005 AND r8,r0,r5
0000bc e1580005 CMP r8,r5
0000c0 1a000005 BNE |L1.220|
0000c4 e35a0001 CMP r10,#1
0000c8 1a000005 BNE |L1.228|
0000cc e1d400b8 LDRH r0,[r4,#8]
0000d0 e1c00008 BIC r0,r0,r8
0000d4 e1c400b8 STRH r0,[r4,#8]
0000d8 ea000001 B |L1.228|
|L1.220|
0000dc e3a00070 MOV r0,#0x70
0000e0 e5c70000 STRB r0,[r7,#0]
|L1.228|
0000e4 e1a0000b MOV r0,r11
0000e8 ebfffffe BL OS_CPU_SR_Restore
0000ec ea000036 B |L1.460|
|L1.240|
0000f0 e1a00000 MOV r0,r0
0000f4 e1d400b8 LDRH r0,[r4,#8]
0000f8 e0008005 AND r8,r0,r5
0000fc e3580000 CMP r8,#0
000100 0a000005 BEQ |L1.284|
000104 e35a0001 CMP r10,#1
000108 1a000005 BNE |L1.292|
00010c e1d400b8 LDRH r0,[r4,#8]
000110 e1c00008 BIC r0,r0,r8
000114 e1c400b8 STRH r0,[r4,#8]
000118 ea000001 B |L1.292|
|L1.284|
00011c e3a00070 MOV r0,#0x70
000120 e5c70000 STRB r0,[r7,#0]
|L1.292|
000124 e1a0000b MOV r0,r11
000128 ebfffffe BL OS_CPU_SR_Restore
00012c ea000026 B |L1.460|
|L1.304|
000130 e1a00000 MOV r0,r0
000134 e1d400b8 LDRH r0,[r4,#8]
000138 e1c58000 BIC r8,r5,r0
00013c e1580005 CMP r8,r5
000140 1a000005 BNE |L1.348|
000144 e35a0001 CMP r10,#1
000148 1a000005 BNE |L1.356|
00014c e1d400b8 LDRH r0,[r4,#8]
000150 e1800008 ORR r0,r0,r8
000154 e1c400b8 STRH r0,[r4,#8]
000158 ea000001 B |L1.356|
|L1.348|
00015c e3a00070 MOV r0,#0x70
000160 e5c70000 STRB r0,[r7,#0]
|L1.356|
000164 e1a0000b MOV r0,r11
000168 ebfffffe BL OS_CPU_SR_Restore
00016c ea000016 B |L1.460|
|L1.368|
000170 e1a00000 MOV r0,r0
000174 e1d400b8 LDRH r0,[r4,#8]
000178 e1c58000 BIC r8,r5,r0
00017c e3580000 CMP r8,#0
000180 0a000005 BEQ |L1.412|
000184 e35a0001 CMP r10,#1
000188 1a000005 BNE |L1.420|
00018c e1d400b8 LDRH r0,[r4,#8]
000190 e1800008 ORR r0,r0,r8
000194 e1c400b8 STRH r0,[r4,#8]
000198 ea000001 B |L1.420|
|L1.412|
00019c e3a00070 MOV r0,#0x70
0001a0 e5c70000 STRB r0,[r7,#0]
|L1.420|
0001a4 e1a0000b MOV r0,r11
0001a8 ebfffffe BL OS_CPU_SR_Restore
0001ac ea000006 B |L1.460|
|L1.432|
0001b0 e1a00000 MOV r0,r0
0001b4 e1a0000b MOV r0,r11
0001b8 ebfffffe BL OS_CPU_SR_Restore
0001bc e3a08000 MOV r8,#0
0001c0 e3a0006f MOV r0,#0x6f
0001c4 e5c70000 STRB r0,[r7,#0]
0001c8 e1a00000 MOV r0,r0
|L1.460|
0001cc e1a00000 MOV r0,r0
0001d0 e1a00008 MOV r0,r8
0001d4 eaffff92 B |L1.36|
ENDP
OSFlagCreate PROC
;;;208 OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, INT8U *err)
;;;209 {
0001d8 e92d41f0 PUSH {r4-r8,lr}
0001dc e1a04000 MOV r4,r0
0001e0 e1a05001 MOV r5,r1
;;;210 OS_FLAG_GRP *pgrp;
;;;211 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;212 OS_CPU_SR cpu_sr = 0;
0001e4 e3a07000 MOV r7,#0
;;;213 #endif
;;;214
;;;215
;;;216
;;;217 #if OS_ARG_CHK_EN > 0
;;;218 if (err == (INT8U *)0) { /* Validate 'err' */
0001e8 e3550000 CMP r5,#0
0001ec 1a000002 BNE |L1.508|
;;;219 return ((OS_FLAG_GRP *)0);
0001f0 e3a00000 MOV r0,#0
|L1.500|
0001f4 e8bd41f0 POP {r4-r8,lr}
;;;220 }
;;;221 #endif
;;;222 if (OSIntNesting > 0) { /* See if called from ISR ... */
;;;223 *err = OS_ERR_CREATE_ISR; /* ... can't CREATE from an ISR */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -