Zephyr API Documentation
2.7.0-rc2
A Scalable Open Source RTOS
__assert.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2011-2014 Wind River Systems, Inc.
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
7
#ifndef ZEPHYR_INCLUDE_SYS___ASSERT_H_
8
#define ZEPHYR_INCLUDE_SYS___ASSERT_H_
9
10
#include <
stdbool.h
>
11
12
#ifdef CONFIG_ASSERT
13
#ifndef __ASSERT_ON
14
#define __ASSERT_ON CONFIG_ASSERT_LEVEL
15
#endif
16
#endif
17
18
#ifdef CONFIG_FORCE_NO_ASSERT
19
#undef __ASSERT_ON
20
#define __ASSERT_ON 0
21
#endif
22
23
#if defined(CONFIG_ASSERT_VERBOSE)
24
#define __ASSERT_PRINT(fmt, ...) printk(fmt, ##__VA_ARGS__)
25
#else
/* CONFIG_ASSERT_VERBOSE */
26
#define __ASSERT_PRINT(fmt, ...)
27
#endif
/* CONFIG_ASSERT_VERBOSE */
28
29
#ifdef CONFIG_ASSERT_NO_MSG_INFO
30
#define __ASSERT_MSG_INFO(fmt, ...)
31
#else
/* CONFIG_ASSERT_NO_MSG_INFO */
32
#define __ASSERT_MSG_INFO(fmt, ...) __ASSERT_PRINT("\t"
fmt "\n", ##__VA_ARGS__)
33
#endif
/* CONFIG_ASSERT_NO_MSG_INFO */
34
35
#if !defined(CONFIG_ASSERT_NO_COND_INFO) && !defined(CONFIG_ASSERT_NO_FILE_INFO)
36
#define __ASSERT_LOC(test) \
37
__ASSERT_PRINT("ASSERTION FAIL [%s] @ %s:%d\n"
, \
38
Z_STRINGIFY(test), \
39
__FILE__, __LINE__)
40
#endif
41
42
#if defined(CONFIG_ASSERT_NO_COND_INFO) && !defined(CONFIG_ASSERT_NO_FILE_INFO)
43
#define __ASSERT_LOC(test) \
44
__ASSERT_PRINT("ASSERTION FAIL @ %s:%d\n"
, \
45
__FILE__, __LINE__)
46
#endif
47
48
#if !defined(CONFIG_ASSERT_NO_COND_INFO) && defined(CONFIG_ASSERT_NO_FILE_INFO)
49
#define __ASSERT_LOC(test) \
50
__ASSERT_PRINT("ASSERTION FAIL [%s]\n"
, \
51
Z_STRINGIFY(test))
52
#endif
53
54
#if defined(CONFIG_ASSERT_NO_COND_INFO) && defined(CONFIG_ASSERT_NO_FILE_INFO)
55
#define __ASSERT_LOC(test) \
56
__ASSERT_PRINT("ASSERTION FAIL\n"
)
57
#endif
58
59
#ifdef __ASSERT_ON
60
#if (__ASSERT_ON < 0) || (__ASSERT_ON > 2)
61
#error "Invalid __ASSERT() level: must be between 0 and 2"
62
#endif
63
64
#if __ASSERT_ON
65
66
#include <
sys/printk.h
>
67
68
#ifdef __cplusplus
69
extern
"C"
{
70
#endif
71
72
#ifdef CONFIG_ASSERT_NO_FILE_INFO
73
void
assert_post_action
(
void
);
74
#define __ASSERT_POST_ACTION() assert_post_action()
75
#else
/* CONFIG_ASSERT_NO_FILE_INFO */
76
void
assert_post_action
(
const
char
*file,
unsigned
int
line);
77
#define __ASSERT_POST_ACTION() assert_post_action(__FILE__, __LINE__)
78
#endif
/* CONFIG_ASSERT_NO_FILE_INFO */
79
80
#ifdef __cplusplus
81
}
82
#endif
83
84
#define __ASSERT_NO_MSG(test) \
85
do { \
86
if (!(test)) { \
87
__ASSERT_LOC(test); \
88
__ASSERT_POST_ACTION(); \
89
} \
90
} while (false)
91
92
#define __ASSERT(test, fmt, ...) \
93
do { \
94
if (!(test)) { \
95
__ASSERT_LOC(test); \
96
__ASSERT_MSG_INFO(fmt, ##__VA_ARGS__); \
97
__ASSERT_POST_ACTION(); \
98
} \
99
} while (false)
100
101
#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) \
102
do { \
103
expr2; \
104
__ASSERT(test, fmt, ##__VA_ARGS__); \
105
} while (false)
106
107
#if (__ASSERT_ON == 1)
108
#warning "__ASSERT() statements are ENABLED"
109
#endif
110
#else
111
#define __ASSERT(test, fmt, ...) { }
112
#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1
113
#define __ASSERT_NO_MSG(test) { }
114
#endif
115
#else
116
#define __ASSERT(test, fmt, ...) { }
117
#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1
118
#define __ASSERT_NO_MSG(test) { }
119
#endif
120
121
#endif
/* ZEPHYR_INCLUDE_SYS___ASSERT_H_ */
printk.h
assert_post_action
void assert_post_action(const char *file, unsigned int line)
Definition:
spinlock_error_case.c:33
stdbool.h
include
sys
__assert.h
Generated on Sun Oct 9 2022 09:21:57 for Zephyr API Documentation by
1.9.4