Loading...
Searching...
No Matches
common_defines.h
1#pragma once
2
3#include "core_defines.h"
4#include <stdbool.h>
5
6#ifdef __cplusplus
7extern "C" {
8#define FURI_NORETURN [[noreturn]]
9#else
10#include <stdnoreturn.h>
11#define FURI_NORETURN noreturn
12#endif
13
14#include <cmsis_compiler.h>
15
16#ifndef FURI_WARN_UNUSED
17#define FURI_WARN_UNUSED __attribute__((warn_unused_result))
18#endif
19
20#ifndef FURI_DEPRECATED
21#define FURI_DEPRECATED __attribute__((deprecated))
22#endif
23
24#ifndef FURI_WEAK
25#define FURI_WEAK __attribute__((weak))
26#endif
27
28#ifndef FURI_PACKED
29#define FURI_PACKED __attribute__((packed))
30#endif
31
32#ifndef FURI_ALWAYS_INLINE
33#define FURI_ALWAYS_INLINE __attribute__((always_inline)) inline
34#endif
35
36#ifndef FURI_IS_IRQ_MASKED
37#define FURI_IS_IRQ_MASKED() (__get_PRIMASK() != 0U)
38#endif
39
40#ifndef FURI_IS_IRQ_MODE
41#define FURI_IS_IRQ_MODE() (__get_IPSR() != 0U)
42#endif
43
44#ifndef FURI_IS_ISR
45#define FURI_IS_ISR() (FURI_IS_IRQ_MODE() || FURI_IS_IRQ_MASKED())
46#endif
47
48typedef struct {
49 uint32_t isrm;
50 bool from_isr;
51 bool kernel_running;
53
54__FuriCriticalInfo __furi_critical_enter(void);
55
56void __furi_critical_exit(__FuriCriticalInfo info);
57
58#ifndef FURI_CRITICAL_ENTER
59#define FURI_CRITICAL_ENTER() __FuriCriticalInfo __furi_critical_info = __furi_critical_enter();
60#endif
61
62#ifndef FURI_CRITICAL_EXIT
63#define FURI_CRITICAL_EXIT() __furi_critical_exit(__furi_critical_info);
64#endif
65
66#ifndef FURI_CHECK_RETURN
67#define FURI_CHECK_RETURN __attribute__((__warn_unused_result__))
68#endif
69
70#ifndef FURI_NAKED
71#define FURI_NAKED __attribute__((naked))
72#endif
73
74#ifndef FURI_DEFAULT
75#define FURI_DEFAULT(x) __attribute__((weak, alias(x)))
76#endif
77
78#ifdef __cplusplus
79}
80#endif
Definition common_defines.h:48