Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
recursive_mutex.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 
25 /*
26  * @file recursive_mutex.h
27  * @date 2014. 5. 11.
28  * @author dlarudgus20
29  * @copyright The BSD (2-Clause) License
30  */
31 
32 #ifndef MUTEX_H_
33 #define MUTEX_H_
34 
35 #include <stddef.h>
36 #include <stdint.h>
37 #include <stdbool.h>
38 #include "task.h"
39 
43 typedef struct tagRecursiveMutex
44 {
45  volatile uint32_t TaskId;
46  volatile uint32_t LockCount;
47 
48  // 32비트 단위로 메모리를 mov하는 건 원자성이 있음.
49  volatile uint32_t bLocked;
51 
56 static inline void ckRecursiveMutexInit(RecursiveMutex *pMutex)
57 {
58  pMutex->TaskId = TASK_INVALID_ID;
59  pMutex->LockCount = 0;
60  pMutex->bLocked = false;
61 }
62 
68 uint32_t ckRecursiveMutexLock(RecursiveMutex *pMutex);
75 
76 #endif /* MUTEX_H_ */
uint32_t ckRecursiveMutexLock(RecursiveMutex *pMutex)
RecursiveMutex 구조체의 임계 영역에 진입합니다.
Definition: recursive_mutex.c:36
volatile uint32_t bLocked
Definition: recursive_mutex.h:49
recursive mutex 구조체입니다.
Definition: recursive_mutex.h:43
struct tagRecursiveMutex RecursiveMutex
recursive mutex 구조체입니다.
bool ckRecursiveMutexUnlock(RecursiveMutex *pMutex)
RecursiveMutex 구조체의 임계 영역에서 빠져나옵니다.
Definition: recursive_mutex.c:60
Definition: task.h:52
volatile uint32_t LockCount
Definition: recursive_mutex.h:46
volatile uint32_t TaskId
Definition: recursive_mutex.h:45