typedef struct {
INT8U OSFlagType;
void *OSFlagWaitList; //Wait List의 첫번째를 가르키는 포인터
OS_FLAGS OSFlagFlags; //몇비트로 설정한건지
} OS_FLAG_GRP;
typedef struct {
void *OSFlagNodeNext;
void *OSFlagNodePrev;
void *OSFlagNodeTCB;
void *OSFlagNodeFlagGrp; //EventFlagGroupt을 가르키는 포인터
OS_FALGS OSFlagNodeFlags; //대기중인 event flag
INT8U OSFlagNodeWaitType;
} OS_FLAG_NODE;
두번째는 OS_FLAG_GRP아니고 OS_FLAG_NODE임
OS_FLAG_GRP의 FLAGS는 task가 호출한 OSFlagPost()로 인하여 설정이 가능하다. OSFlagCreate()함수 호출 시 생성된다.
OS_FLAG_NODE의 FLAGS는 task가 호출한 OSFlagPend()로 생성된 구조체로 GRP의 Flag가 해당 구초체의 Flag 조건과 같을 때 함수를 호출한 task가 깨어난다.
OS_FLAG_GRP *e_grp;
INT8U err;
e_grp = OSFlagCreate(0x00, &err);
OSFlagPend(e_grp, 0x01, OS_FLAG_WAIT_SET_ALL + OS_FLAG_CONSUME, 0, &err);
OSFlagPost(e_grp, 0x01, OS_FLAG_SET, &err)