Very Simple Kernel 0.1.0
Loading...
Searching...
No Matches
vsk_CriticalSection.h
Go to the documentation of this file.
1/**
2 * @file
3 */
4#ifndef VSK_CRITICALSECTION_H
5#define VSK_CRITICALSECTION_H
6/**
7 * @ingroup vsk
8 * @defgroup vsk_CriticalSection vsk_CriticalSection
9 * @{
10 */
11
12/**
13 * @brief Critical section
14 */
16
17#include <stdint.h>
18
19/**
20 * @brief On enter callback
21 */
22typedef void (*vsk_CriticalSection_OnEnter_t)(void);
23
24/**
25 * @brief On exit callback
26 */
27typedef void (*vsk_CriticalSection_OnExit_t)(void);
28
29/**
30 * @brief Critical section
31 */
33 vsk_CriticalSection_OnEnter_t onEnter; /**< Called on entering a critical section */
34 vsk_CriticalSection_OnExit_t onExit; /**< Called on exiting a critical section */
35 uint8_t volatile nestingLevels; /**< The nesting level of the critical section */
36};
37
38/**
39 * @brief Critical section instance
40 */
42
43/**
44 * @brief Initializes the critical section.
45 *
46 * @param self Critical section reference
47 * @param onEnter On enter callback
48 * @param onExit On exit callback
49 * @return Initialized critical section
50 */
52 vsk_CriticalSection_t * const self,
55);
56
57/**
58 * @brief Enters a critical section
59 *
60 * @param self Critical section reference
61 */
63
64/**
65 * @brief Exits a critical section
66 *
67 * @param self Critical section reference
68 */
70
71/** @} */
72#endif // VSK_CRITICALSECTION_H
vsk_CriticalSection_t vsk_CriticalSection
Critical section instance.
Definition vsk_CriticalSection.c:3
void(* vsk_CriticalSection_OnEnter_t)(void)
On enter callback.
Definition vsk_CriticalSection.h:22
void(* vsk_CriticalSection_OnExit_t)(void)
On exit callback.
Definition vsk_CriticalSection.h:27
vsk_CriticalSection_t * vsk_CriticalSection_init(vsk_CriticalSection_t *const self, vsk_CriticalSection_OnEnter_t const onEnter, vsk_CriticalSection_OnExit_t const onExit)
Initializes the critical section.
Definition vsk_CriticalSection.c:5
void vsk_CriticalSection_enter(vsk_CriticalSection_t *const self)
Enters a critical section.
Definition vsk_CriticalSection.c:16
void vsk_CriticalSection_exit(vsk_CriticalSection_t *const self)
Exits a critical section.
Definition vsk_CriticalSection.c:21
Critical section.
Definition vsk_CriticalSection.h:32
vsk_CriticalSection_OnExit_t onExit
Definition vsk_CriticalSection.h:34
vsk_CriticalSection_OnEnter_t onEnter
Definition vsk_CriticalSection.h:33
uint8_t volatile nestingLevels
Definition vsk_CriticalSection.h:35