?? os_flag.lst
字號:
C51 COMPILER V7.06 OS_FLAG 07/18/2003 11:05:57 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE OS_FLAG
OBJECT MODULE PLACED IN .\os_flag.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\keilc51\os_flag.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\os_flag.lst) O
-BJECT(.\os_flag.obj)
stmt level source
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 * EVENT FLAG MANAGEMENT
6 *
7 * (c) Copyright 2001-2002, Jean J. Labrosse, Weston, FL
8 * All Rights Reserved
9 *
10 * File : OS_FLAG.C
11 * By : Jean J. Labrosse
12 *********************************************************************************************************
13 */
14
15 #ifndef OS_MASTER_FILE
16 #include "includes.h"
17 #endif
18
19 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
20 /*
21 *********************************************************************************************************
22 * LOCAL PROTOTYPES
23 *********************************************************************************************************
24 */
25
26 static void OS_FlagBlock(OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT
-16U timeout) reentrant;
27 static BOOLEAN OS_FlagTaskRdy(OS_FLAG_NODE *pnode, OS_FLAGS flags_rdy) reentrant;
28
29 /*$PAGE*/
30 /*
31 *********************************************************************************************************
32 * CHECK THE STATUS OF FLAGS IN AN EVENT FLAG GROUP
33 *
34 * Description: This function is called to check the status of a combination of bits to be set or cleared
35 * in an event flag group. Your application can check for ANY bit to be set/cleared or ALL
36 * bits to be set/cleared.
37 *
38 * This call does not block if the desired flags are not present.
39 *
40 * Arguments : pgrp is a pointer to the desired event flag group.
41 *
42 * flags Is a bit pattern indicating which bit(s) (i.e. flags) you wish to check.
43 * The bits you want are specified by setting the corresponding bits in
44 * 'flags'. e.g. if your application wants to wait for bits 0 and 1 then
45 * 'flags' would contain 0x03.
46 *
47 * wait_type specifies whether you want ALL bits to be set/cleared or ANY of the bits
48 * to be set/cleared.
49 * You can specify the following argument:
50 *
51 * OS_FLAG_WAIT_CLR_ALL You will check ALL bits in 'flags' to be clear (0)
52 * OS_FLAG_WAIT_CLR_ANY You will check ANY bit in 'flags' to be clear (0)
53 * OS_FLAG_WAIT_SET_ALL You will check ALL bits in 'flags' to be set (1)
C51 COMPILER V7.06 OS_FLAG 07/18/2003 11:05:57 PAGE 2
54 * OS_FLAG_WAIT_SET_ANY You will check ANY bit in 'flags' to be set (1)
55 *
56 * NOTE: Add OS_FLAG_CONSUME if you want the event flag to be 'consumed' by
57 * the call. Example, to wait for any flag in a group AND then clear
58 * the flags that are present, set 'wait_type' to:
59 *
60 * OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME
61 *
62 * err is a pointer to an error code and can be:
63 * OS_NO_ERR No error
64 * OS_ERR_EVENT_TYPE You are not pointing to an event flag group
65 * OS_FLAG_ERR_WAIT_TYPE You didn't specify a proper 'wait_type' argument.
66 * OS_FLAG_INVALID_PGRP You passed a NULL pointer instead of the event flag
67 * group handle.
68 * OS_FLAG_ERR_NOT_RDY The desired flags you are waiting for are not
69 * available.
70 *
71 * Returns : The state of the flags in the event flag group.
72 *
73 * Called from: Task or ISR
74 *********************************************************************************************************
75 */
76
77 #if OS_FLAG_ACCEPT_EN > 0
78 OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err) reentrant //using
-0
79 {
80 1 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
81 1 OS_CPU_SR cpu_sr;
82 1 #endif
83 1 OS_FLAGS flags_cur;
84 1 OS_FLAGS flags_rdy;
85 1 BOOLEAN consume;
86 1
87 1
88 1 #if OS_ARG_CHK_EN > 0
89 1 if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
90 2 *err = OS_FLAG_INVALID_PGRP;
91 2 return ((OS_FLAGS)0);
92 2 }
93 1 #endif
94 1 if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
95 2 *err = OS_ERR_EVENT_TYPE;
96 2 return ((OS_FLAGS)0);
97 2 }
98 1 if (wait_type & OS_FLAG_CONSUME) { /* See if we need to consume the flags */
99 2 wait_type &= ~OS_FLAG_CONSUME;
100 2 consume = TRUE;
101 2 } else {
102 2 consume = FALSE;
103 2 }
104 1 /*$PAGE*/
105 1 *err = OS_NO_ERR; /* Assume NO error until proven otherwise. */
106 1 OS_ENTER_CRITICAL();
107 1 switch (wait_type) {
108 2 case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
109 2 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
110 2 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
111 3 if (consume == TRUE) { /* See if we need to consume the flags */
112 4 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
113 4 }
114 3 } else {
C51 COMPILER V7.06 OS_FLAG 07/18/2003 11:05:57 PAGE 3
115 3 *err = OS_FLAG_ERR_NOT_RDY;
116 3 }
117 2 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
118 2 OS_EXIT_CRITICAL();
119 2 break;
120 2
121 2 case OS_FLAG_WAIT_SET_ANY:
122 2 flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
123 2 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
124 3 if (consume == TRUE) { /* See if we need to consume the flags */
125 4 pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
126 4 }
127 3 } else {
128 3 *err = OS_FLAG_ERR_NOT_RDY;
129 3 }
130 2 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
131 2 OS_EXIT_CRITICAL();
132 2 break;
133 2
134 2 #if OS_FLAG_WAIT_CLR_EN > 0
135 2 case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
136 2 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
137 2 if (flags_rdy == flags) { /* Must match ALL the bits that we want */
138 3 if (consume == TRUE) { /* See if we need to consume the flags */
139 4 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
140 4 }
141 3 } else {
142 3 *err = OS_FLAG_ERR_NOT_RDY;
143 3 }
144 2 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
145 2 OS_EXIT_CRITICAL();
146 2 break;
147 2
148 2 case OS_FLAG_WAIT_CLR_ANY:
149 2 flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
150 2 if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
151 3 if (consume == TRUE) { /* See if we need to consume the flags */
152 4 pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we got */
153 4 }
154 3 } else {
155 3 *err = OS_FLAG_ERR_NOT_RDY;
156 3 }
157 2 flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
158 2 OS_EXIT_CRITICAL();
159 2 break;
160 2 #endif
161 2
162 2 default:
163 2 OS_EXIT_CRITICAL();
164 2 flags_cur = (OS_FLAGS)0;
165 2 *err = OS_FLAG_ERR_WAIT_TYPE;
166 2 break;
167 2 }
168 1 return (flags_cur);
169 1 }
170 #endif
171
172 /*$PAGE*/
173 /*
174 *********************************************************************************************************
175 * CREATE AN EVENT FLAG
176 *
C51 COMPILER V7.06 OS_FLAG 07/18/2003 11:05:57 PAGE 4
177 * Description: This function is called to create an event flag group.
178 *
179 * Arguments : flags Contains the initial value to store in the event flag group.
180 *
181 * err is a pointer to an error code which will be returned to your application:
182 * OS_NO_ERR if the call was successful.
183 * OS_ERR_CREATE_ISR if you attempted to create an Event Flag from an
184 * ISR.
185 * OS_FLAG_GRP_DEPLETED if there are no more event flag groups
186 *
187 * Returns : A pointer to an event flag group or a NULL pointer if no more groups are available.
188 *
189 * Called from: Task ONLY
190 *********************************************************************************************************
191 */
192
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -