Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
binary_semaphore.h
이 파일의 문서화 페이지로 가기
1 // Copyright (c) 2014, 임경현 (dlarudgus20)
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright notice, this
8 // list of conditions and the following disclaimer.
9 //
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 
32 #ifndef BINARY_SEMAPHORE_H_
33 #define BINARY_SEMAPHORE_H_
34 
35 #include <stddef.h>
36 #include <stdint.h>
37 #include <stdbool.h>
38 
42 typedef struct tagBiSem
43 {
44  volatile uint32_t flag;
45 } BiSem;
46 
52 static inline bool ckBiSemInit(BiSem *bisem, uint32_t InitVal)
53 {
54  if (InitVal > 1)
55  return false;
56 
57  bisem->flag = InitVal;
58 
59  return true;
60 }
61 
66 void ckBiSemEnter(BiSem *bisem);
71 bool ckBiSemPost(BiSem *bisem);
76 bool ckBiSemUnpost(BiSem *bisem);
81 void ckBiSemWait(BiSem *bisem);
82 
83 #endif /* BINARY_SEMAPHORE_H_ */
void ckBiSemWait(BiSem *bisem)
바이너리 세마포어의 임계 영역에 진입하되, 카운터를 증가시키지 않습니다.
Definition: binary_semaphore.c:54
struct tagBiSem BiSem
바이너리 세마포어 구조체입니다.
bool ckBiSemUnpost(BiSem *bisem)
바이너리 세마포어의 카운터를 증가시킵니다.
Definition: binary_semaphore.c:49
volatile uint32_t flag
binary semaphore의 flag입니다.
Definition: binary_semaphore.h:44
void ckBiSemEnter(BiSem *bisem)
바이너리 세마포어의 임계 영역에 진입하고, 카운터를 증가시킵니다.
Definition: binary_semaphore.c:36
bool ckBiSemPost(BiSem *bisem)
바이너리 세마포어의 카운터를 감소시킵니다.
Definition: binary_semaphore.c:44
바이너리 세마포어 구조체입니다.
Definition: binary_semaphore.h:42