00001
00013 #ifndef _DBG_ASSERT_H_
00014 #define _DBG_ASSERT_H_
00015
00025
00026
00027
00028
00029 #include "rwnx_config.h"
00030 #include "compiler.h"
00031
00032
00033
00034
00035
00036 #if NX_TRACE
00038 #define LINE_NB ((TRACE_FILE_ID << 20) + (__LINE__ & 0xfffff))
00039 #else
00041 #define LINE_NB __LINE__
00042 #endif
00043
00044
00045
00046
00047
00056 void dbg_force_trigger(const char *msg);
00057
00067 void dbg_assert_rec(const char *condition, const char * file, int line);
00068
00078 void dbg_assert_err(const char *condition, const char * file, int line);
00079
00089 void dbg_assert_warn(const char *condition, const char * file, int line);
00090
00092 #if (NX_DEBUG > 1)
00093 #define ASSERT(type, cond) dbg_assert_##type(cond, __MODULE__, LINE_NB)
00094 #elif (NX_DEBUG > 0)
00095 #define ASSERT(type, cond) dbg_assert_##type("", __MODULE__, LINE_NB)
00096 #else
00097 #define ASSERT(type, cond) dbg_assert_##type("", "", 0)
00098 #endif
00099
00100 #if NX_DEBUG
00102 #define ASSERT_ERR(cond) \
00103 do { \
00104 if (!(cond)) { \
00105 ASSERT(err, #cond); \
00106 } \
00107 } while(0)
00108
00110 #define ASSERT_ERR2(cond, param0, param1) ASSERT_ERR(cond)
00111
00113 #define ASSERT_WARN(cond) \
00114 do { \
00115 if (!(cond)) { \
00116 ASSERT(warn, #cond); \
00117 } \
00118 } while(0)
00119 #else
00121 #define ASSERT_ERR(cond)
00123 #define ASSERT_ERR2(cond, param0, param1)
00125 #define ASSERT_WARN(cond)
00126 #endif
00127
00128 #if NX_RECOVERY
00130 #define ASSERT_REC(cond) \
00131 ({ \
00132 if (!(cond)) { \
00133 ASSERT(rec, #cond); \
00134 return; \
00135 } \
00136 })
00137
00139 #define ASSERT_REC_VAL(cond, ret) \
00140 ({ \
00141 if (!(cond)) { \
00142 ASSERT(rec, #cond); \
00143 return (ret); \
00144 } \
00145 })
00146
00148 #define ASSERT_REC_NO_RET(cond) \
00149 ({ \
00150 if (!(cond)) { \
00151 ASSERT(rec, #cond); \
00152 } \
00153 })
00154 #else
00156 #define ASSERT_REC(cond) ASSERT_ERR(cond)
00157
00159 #define ASSERT_REC_VAL(cond, ret) ASSERT_ERR(cond)
00160
00162 #define ASSERT_REC_NO_RET(cond) ASSERT_ERR(cond)
00163 #endif
00164
00165
00167
00168 #endif // _DBG_ASSERT_H_