📄 os_flag.txt
字号:
;;;646 }
;;;647 break;
;;;648
;;;649 case OS_FLAG_WAIT_CLR_ANY:
;;;650 flags_rdy = (OS_FLAGS)(~pgrp->OSFlagFlags & flags); /* Extract only the bits we want */
;;;651 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
;;;652 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;653 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
;;;654 }
;;;655 OSTCBCur->OSTCBFlagsRdy = flags_rdy; /* Save flags that were ready */
;;;656 OS_EXIT_CRITICAL(); /* Yes, condition met, return to caller */
;;;657 *err = OS_ERR_NONE;
;;;658 return (flags_rdy);
;;;659 } else { /* Block task until events occur or timeout */
;;;660 OS_FlagBlock(pgrp, &node, flags, wait_type, timeout);
;;;661 OS_EXIT_CRITICAL();
;;;662 }
;;;663 break;
;;;664 #endif
;;;665
;;;666 default:
;;;667 OS_EXIT_CRITICAL();
;;;668 flags_rdy = (OS_FLAGS)0;
;;;669 *err = OS_ERR_FLAG_WAIT_TYPE;
;;;670 return (flags_rdy);
;;;671 }
;;;672 /*$PAGE*/
;;;673 OS_Sched(); /* Find next HPT ready to run */
;;;674 OS_ENTER_CRITICAL();
;;;675 if (OSTCBCur->OSTCBStatPend != OS_STAT_PEND_OK) { /* Have we timed-out or aborted? */
;;;676 pend_stat = OSTCBCur->OSTCBStatPend;
;;;677 OSTCBCur->OSTCBStatPend = OS_STAT_PEND_OK;
;;;678 OS_FlagUnlink(&node);
;;;679 OSTCBCur->OSTCBStat = OS_STAT_RDY; /* Yes, make task ready-to-run */
;;;680 OS_EXIT_CRITICAL();
;;;681 flags_rdy = (OS_FLAGS)0;
;;;682 switch (pend_stat) {
;;;683 case OS_STAT_PEND_TO:
;;;684 default:
;;;685 *err = OS_ERR_TIMEOUT; /* Indicate that we timed-out waiting */
;;;686 break;
;;;687
;;;688 case OS_STAT_PEND_ABORT:
;;;689 *err = OS_ERR_PEND_ABORT; /* Indicate that we aborted waiting */
;;;690 break;
;;;691 }
;;;692 return (flags_rdy);
;;;693 }
;;;694 flags_rdy = OSTCBCur->OSTCBFlagsRdy;
;;;695 if (consume == OS_TRUE) { /* See if we need to consume the flags */
;;;696 switch (wait_type) {
;;;697 case OS_FLAG_WAIT_SET_ALL:
;;;698 case OS_FLAG_WAIT_SET_ANY: /* Clear ONLY the flags we got */
;;;699 pgrp->OSFlagFlags &= ~flags_rdy;
;;;700 break;
;;;701
;;;702 #if OS_FLAG_WAIT_CLR_EN > 0
;;;703 case OS_FLAG_WAIT_CLR_ALL:
;;;704 case OS_FLAG_WAIT_CLR_ANY: /* Set ONLY the flags we got */
;;;705 pgrp->OSFlagFlags |= flags_rdy;
;;;706 break;
;;;707 #endif
;;;708 default:
;;;709 OS_EXIT_CRITICAL();
;;;710 *err = OS_ERR_FLAG_WAIT_TYPE;
;;;711 return ((OS_FLAGS)0);
;;;712 }
;;;713 }
;;;714 OS_EXIT_CRITICAL();
;;;715 *err = OS_ERR_NONE; /* Event(s) must have occurred */
;;;716 return (flags_rdy);
;;;717 }
0007f8 e12fff1e BX lr
|L1.2044|
0007fc e3540000 CMP r4,#0
000800 1a000003 BNE |L1.2068|
000804 e3a0006e MOV r0,#0x6e
000808 e5c80000 STRB r0,[r8,#0]
00080c e3a00000 MOV r0,#0
000810 eafffff6 B |L1.2032|
|L1.2068|
000814 e59f0748 LDR r0,|L1.3940|
000818 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
00081c e3500000 CMP r0,#0
000820 da000003 BLE |L1.2100|
000824 e3a00002 MOV r0,#2
000828 e5c80000 STRB r0,[r8,#0]
00082c e3a00000 MOV r0,#0
000830 eaffffee B |L1.2032|
|L1.2100|
000834 e59f073c LDR r0,|L1.3960|
000838 e5d00000 LDRB r0,[r0,#0] ; OSLockNesting
00083c e3500000 CMP r0,#0
000840 da000003 BLE |L1.2132|
000844 e3a0000d MOV r0,#0xd
000848 e5c80000 STRB r0,[r8,#0]
00084c e3a00000 MOV r0,#0
000850 eaffffe6 B |L1.2032|
|L1.2132|
000854 e5d40000 LDRB r0,[r4,#0]
000858 e3500005 CMP r0,#5
00085c 0a000003 BEQ |L1.2160|
000860 e3a00001 MOV r0,#1
000864 e5c80000 STRB r0,[r8,#0]
000868 e3a00000 MOV r0,#0
00086c eaffffdf B |L1.2032|
|L1.2160|
000870 e2060080 AND r0,r6,#0x80
000874 e58d000c STR r0,[sp,#0xc]
000878 e59d000c LDR r0,[sp,#0xc]
00087c e3500000 CMP r0,#0
000880 0a000002 BEQ |L1.2192|
000884 e3c66080 BIC r6,r6,#0x80
000888 e3a0b001 MOV r11,#1
00088c ea000000 B |L1.2196|
|L1.2192|
000890 e3a0b000 MOV r11,#0
|L1.2196|
000894 ebfffffe BL OS_CPU_SR_Save
000898 e58d0008 STR r0,[sp,#8]
00089c e3560000 CMP r6,#0
0008a0 0a00003e BEQ |L1.2464|
0008a4 e3560001 CMP r6,#1
0008a8 0a000058 BEQ |L1.2576|
0008ac e3560002 CMP r6,#2
0008b0 0a000002 BEQ |L1.2240|
0008b4 e3560003 CMP r6,#3
0008b8 1a000070 BNE |L1.2688|
0008bc ea00001b B |L1.2352|
|L1.2240|
0008c0 e1a00000 MOV r0,r0
0008c4 e1d400b8 LDRH r0,[r4,#8]
0008c8 e0009005 AND r9,r0,r5
0008cc e1590005 CMP r9,r5
0008d0 1a00000d BNE |L1.2316|
0008d4 e35b0001 CMP r11,#1
0008d8 1a000002 BNE |L1.2280|
0008dc e1d400b8 LDRH r0,[r4,#8]
0008e0 e1c00009 BIC r0,r0,r9
0008e4 e1c400b8 STRH r0,[r4,#8]
|L1.2280|
0008e8 e59f0684 LDR r0,|L1.3956|
0008ec e5900000 LDR r0,[r0,#0] ; OSTCBCur
0008f0 e1c092b8 STRH r9,[r0,#0x28]
0008f4 e59d0008 LDR r0,[sp,#8]
0008f8 ebfffffe BL OS_CPU_SR_Restore
0008fc e3a00000 MOV r0,#0
000900 e5c80000 STRB r0,[r8,#0]
000904 e1a00009 MOV r0,r9
000908 eaffffb8 B |L1.2032|
|L1.2316|
00090c e1a03006 MOV r3,r6
000910 e1a02005 MOV r2,r5
000914 e58d7000 STR r7,[sp,#0]
000918 e28d1010 ADD r1,sp,#0x10
00091c e1a00004 MOV r0,r4
000920 ebfffffe BL OS_FlagBlock
000924 e59d0008 LDR r0,[sp,#8]
000928 ebfffffe BL OS_CPU_SR_Restore
00092c ea00005b B |L1.2720|
|L1.2352|
000930 e1a00000 MOV r0,r0
000934 e1d400b8 LDRH r0,[r4,#8]
000938 e0009005 AND r9,r0,r5
00093c e3590000 CMP r9,#0
000940 0a00000d BEQ |L1.2428|
000944 e35b0001 CMP r11,#1
000948 1a000002 BNE |L1.2392|
00094c e1d400b8 LDRH r0,[r4,#8]
000950 e1c00009 BIC r0,r0,r9
000954 e1c400b8 STRH r0,[r4,#8]
|L1.2392|
000958 e59f0614 LDR r0,|L1.3956|
00095c e5900000 LDR r0,[r0,#0] ; OSTCBCur
000960 e1c092b8 STRH r9,[r0,#0x28]
000964 e59d0008 LDR r0,[sp,#8]
000968 ebfffffe BL OS_CPU_SR_Restore
00096c e3a00000 MOV r0,#0
000970 e5c80000 STRB r0,[r8,#0]
000974 e1a00009 MOV r0,r9
000978 eaffff9c B |L1.2032|
|L1.2428|
00097c e1a03006 MOV r3,r6
000980 e1a02005 MOV r2,r5
000984 e58d7000 STR r7,[sp,#0]
000988 e28d1010 ADD r1,sp,#0x10
00098c e1a00004 MOV r0,r4
000990 ebfffffe BL OS_FlagBlock
000994 e59d0008 LDR r0,[sp,#8]
000998 ebfffffe BL OS_CPU_SR_Restore
00099c ea00003f B |L1.2720|
|L1.2464|
0009a0 e1a00000 MOV r0,r0
0009a4 e1d400b8 LDRH r0,[r4,#8]
0009a8 e1c59000 BIC r9,r5,r0
0009ac e1590005 CMP r9,r5
0009b0 1a00000d BNE |L1.2540|
0009b4 e35b0001 CMP r11,#1
0009b8 1a000002 BNE |L1.2504|
0009bc e1d400b8 LDRH r0,[r4,#8]
0009c0 e1800009 ORR r0,r0,r9
0009c4 e1c400b8 STRH r0,[r4,#8]
|L1.2504|
0009c8 e59f05a4 LDR r0,|L1.3956|
0009cc e5900000 LDR r0,[r0,#0] ; OSTCBCur
0009d0 e1c092b8 STRH r9,[r0,#0x28]
0009d4 e59d0008 LDR r0,[sp,#8]
0009d8 ebfffffe BL OS_CPU_SR_Restore
0009dc e3a00000 MOV r0,#0
0009e0 e5c80000 STRB r0,[r8,#0]
0009e4 e1a00009 MOV r0,r9
0009e8 eaffff80 B |L1.2032|
|L1.2540|
0009ec e1a03006 MOV r3,r6
0009f0 e1a02005 MOV r2,r5
0009f4 e58d7000 STR r7,[sp,#0]
0009f8 e28d1010 ADD r1,sp,#0x10
0009fc e1a00004 MOV r0,r4
000a00 ebfffffe BL OS_FlagBlock
000a04 e59d0008 LDR r0,[sp,#8]
000a08 ebfffffe BL OS_CPU_SR_Restore
000a0c ea000023 B |L1.2720|
|L1.2576|
000a10 e1a00000 MOV r0,r0
000a14 e1d400b8 LDRH r0,[r4,#8]
000a18 e1c59000 BIC r9,r5,r0
000a1c e3590000 CMP r9,#0
000a20 0a00000d BEQ |L1.2652|
000a24 e35b0001 CMP r11,#1
000a28 1a000002 BNE |L1.2616|
000a2c e1d400b8 LDRH r0,[r4,#8]
000a30 e1800009 ORR r0,r0,r9
000a34 e1c400b8 STRH r0,[r4,#8]
|L1.2616|
000a38 e59f0534 LDR r0,|L1.3956|
000a3c e5900000 LDR r0,[r0,#0] ; OSTCBCur
000a40 e1c092b8 STRH r9,[r0,#0x28]
000a44 e59d0008 LDR r0,[sp,#8]
000a48 ebfffffe BL OS_CPU_SR_Restore
000a4c e3a00000 MOV r0,#0
000a50 e5c80000 STRB r0,[r8,#0]
000a54 e1a00009 MOV r0,r9
000a58 eaffff64 B |L1.2032|
|L1.2652|
000a5c e1a03006 MOV r3,r6
000a60 e1a02005 MOV r2,r5
000a64 e58d7000 STR r7,[sp,#0]
000a68 e28d1010 ADD r1,sp,#0x10
000a6c e1a00004 MOV r0,r4
000a70 ebfffffe BL OS_FlagBlock
000a74 e59d0008 LDR r0,[sp,#8]
000a78 ebfffffe BL OS_CPU_SR_Restore
000a7c ea000007 B |L1.2720|
|L1.2688|
000a80 e1a00000 MOV r0,r0
000a84 e59d0008 LDR r0,[sp,#8]
000a88 ebfffffe BL OS_CPU_SR_Restore
000a8c e3a09000 MOV r9,#0
000a90 e3a0006f MOV r0,#0x6f
000a94 e5c80000 STRB r0,[r8,#0]
000a98 e1a00009 MOV r0,r9
000a9c eaffff53 B |L1.2032|
|L1.2720|
000aa0 e1a00000 MOV r0,r0
000aa4 ebfffffe BL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -