Skip to content

嵌入式DEBUG方法

#include <stdio.h>
#ifndef assert_printf
#error need define assert_printf
#else
#ifndef NDEBUG
#if __STDC_VERSION__ < 199901L && !defined(__func__)
# if __GNUC__ >= 2
# define __func__ __FUNCTION__
# else
# define __func__ "<unknown>"
# endif
#endif
# define vassert(condition, format, ...) do { \
if(!(condition)) { \
assert_printf("WARNING: %s:%d: %s:" \
" Assertion \"%s\" failed.\r\n", \
__FILE__, __LINE__, __func__, #condition); \
while(1){}; \
}else{ \
assert_printf(format, ##__VA_ARGS__); \
} \
} while(0)
#else
#define vassert(condition, format, ...) do {}while(0)
#endif
#endif
#include <stdio.h>
#define DBG_UART printf
#ifdef CONFIG_DEBUG
extern int log_num;
#ifdef CONFIG_DEBUG_COLOR_MODE
#define COLOR_SET(dis_mode, fwd_color, bak_color) DBG_UART("\033[%d;%d;%dm", dis_mode, fwd_color, bak_color)
#else
#define COLOR_SET(dis_mode, fwd_color, bak_color) (NULL)
#endif
/*
x:背景色
y:前景色
z:特殊效果
*/
#define DBG_LOG(x, y, z, str, ...) \
{ \
COLOR_SET(x, y, z); \
DBG_UART(str, ##__VA_ARGS__); \
COLOR_SET(0, 0, 0); \
}
/*
* I:INFO W:WARN E:ERR F:FLAG
*/
#if CONFIG_DEBUG_LEVEL >= 0x01
#define DBG_E(str, ...) \
{ \
COLOR_SET(31, 31, 1); \
DBG_UART("[%05d] E/%-4s: ", log_num++, DBG_NAME); \
DBG_UART(str, ##__VA_ARGS__); \
COLOR_SET(0, 0, 0); \
}
#else
#define DBG_E(str, ...) while(0)
#endif
#if CONFIG_DEBUG_LEVEL >= 0x02
#define DBG_W(str, ...) \
{ \
COLOR_SET(33, 33, 1); \
DBG_UART("[%05d] W/%-4s: ", log_num++, DBG_NAME); \
DBG_UART(str, ##__VA_ARGS__); \
COLOR_SET(0, 0, 0); \
}
#else
#define DBG_W(str, ...) while(0)
#endif
#if CONFIG_DEBUG_LEVEL >= 0x03
#define DBG_F(str, ...) \
{ \
COLOR_SET(36, 36, 1); \
DBG_UART("[%05d] F/%-4s: ", log_num++, DBG_NAME); \
DBG_UART(str, ##__VA_ARGS__); \
COLOR_SET(0, 0, 0); \
}
#else
#define DBG_F(str, ...) while(0)
#endif
#if CONFIG_DEBUG_LEVEL >= 0x04
#define DBG_I(str, ...) \
{ \
DBG_UART("[%05d] I/%-4s: ", log_num++, DBG_NAME); \
DBG_UART(str, ##__VA_ARGS__); \
}
#else
#define DBG_I(str, ...) while(0)
#endif
#else
#define DBG_I(str, ...) while(0)
#define DBG_W(str, ...) while(0)
#define DBG_E(str, ...) while(0)
#define DBG_F(str, ...) while(0)
#endif