Chapter 09
Chapter 09
1
Event Flag Management
OSFlagPost() OSFlagAccept()
ISR OSFlagQuery() ISR
2
Functions
• OSFlagCreate()
– Creating an event flag group
• OSFlagDel()
– Deleting an event flag group
• OSFlagPend()
– Waiting for events
– OS_FlagBlock()
• OSFlagAccept()
– Looking for events
• OSFlagPost()
– Setting or clearing events
– OS_FlagTaskRdy()
• OSFlagQuery()
– Querying an event flag group
3
Example - 1
H
post(0x01)
post(0x02)
4
Example - 2
H
L pend(0x01)
pend(0x02) continue
5
Event flag group,
event flag nodes and TCBs
OS_EVENT_TYPE_FLAG OS_Flag_GRP
OSFlagWaitList
OS_Flag_NODE
OSFlagFlags
OS_TCB
6
OS_FLAG_GRP &
OS_EVENT
OS_EVENT_TYPE_FLAG .OSEventType
OSFlagWaitList .OSEventGrp
OSFlagFlags .OSEventCnt
.OSEventPtr
7 6 5 4 3 2 1 0
15 14 13 12 11 10 9 8
.
.
.
55 54 53 52 51 50 49 48
63 62 61 60 59 58 57 56
7
Event flag group,
event flag nodes
OS_EVENT_TYPE_FLAG
OSFlagWaitList
OSFlagFlags
OS_FlagNodeNext
OS_FlagNodePrev
OS_FlagNodeTCB
OS_FlagNodeFlagGrp
OS_FlagNodeFlagFlags
OS_FlagNodeWaitType 8
.OSFlagNodeWaitType
OS_FlagNodeNext
OS_FlagNodePrev
OS_FlagNodeTCB
OS_FlagNodeFlagGrp
OS_FlagNodeFlagFlags
OS_FlagNodeWaitType 9
OSFlagCreate()
10
OSFlagCreate()
OS_EVENT_TYPE_FLAG
OSFlagWaitList
OSFlagFlags
11
OSFlagDel()
opt =?
DEL_ALWAYS DEL_NO_PEND
N
pnode==0 Pnode== 0
Y
N Y
FlagTaskRdy Free(Flag)
N
pnode==0
reterun err
12
12
Y
OSFlagDel()
OS_DEL_NO_PEND
OS_DEL_ALWAYS
13
OSFlagDel()
14
OSFlagPend()
Y Y
Type = SetALL? Match? Return
N
N
FlagBlock
…
OSSched
==Rdy
Return;
15
OSFlagPend()
OS_FLAG_WAIT_CLR_ALL
OS_FLAG_WAIT_CLR_ANY
OS_FLAG_WAIT_SET_ALL + OS_FLAG_CONSUME
OS_FLAG_WAIT_SET_ANY
16
OSFlagPend()
17
OSFlagPend()
18
OSFlagPend()
19
OS_FlagBlock()
OS_FlagNodeNext
OS_FlagNodePrev
OS_FlagNodeTCB
OS_FlagNodeFlagGrp
OS_FlagNodeFlagFlags
OS_FlagNodeWaitType 20
21
OSFlagPost()
OSFlagFlags =
hasNext?
newValue N
Y
OSSched
Is the task
Rdy?
N
Y
FlagTaskRdy
22
OSFlagPost()
23
OSFlagPost()
24
OSFlagPost()
25
OS_FlagTaskRdy()
• Make a task ready to run
26
OS_FlagTaskRdy()
27
OS_FlagUnlink()
• The unlinking of the OS_FLAG_NODE is
performed by the function
28
OS_FlagUnlink()
29
OSFlagAccept()
30
OSFlagAccept()
31
OSFlagAccept()
32
OS_FlagInit()
• This function is called by μC/OS-II to initialize
the event flag module.
33
OS_FlagInit() OS_EVENT_TYPE_FLAG
OSFlagWaitList
OSFlagFlags
34
OS_FlagInit()
35