关于 W80X debug printf

发布于 2024-12-24 10: 21: 10

正在收集工作区信息

wm_debug. h

文件定义了调试模块的 API 和宏, 用于控制调试信息的输出. 以下是对代码的详细分析:

头文件包含

#include  "stdio. h" 
#include  "stdlib. h" 
#include "wm_config. h"
#include "wm_osal. h"

这些头文件提供了标准输入输出函数, 标准库函数以及项目配置和操作系统抽象层的函数和宏定义.

调试开关和级别定义

#define TLS_DBG_ON                  1
#define TLS_DBG_OFF                 0

#define TLS_DBG_SIMPLE              1

#define TLS_DBG_LEVEL_INFO          TLS_DBG_OFF
#define TLS_DBG_LEVEL_WARNING       TLS_DBG_OFF
#define TLS_DBG_LEVEL_ERR           TLS_DBG_OFF
#define TLS_DBG_LEVEL_DUMP          TLS_DBG_OFF

#define TLS_GENERAL_DBG             TLS_DBG_OFF
  • TLS_DBG_ONTLS_DBG_OFF: 定义调试开关的状态.
  • TLS_DBG_SIMPLE: 定义是否使用简单的调试输出.
  • TLS_DBG_LEVEL_INFO, TLS_DBG_LEVEL_WARNING, TLS_DBG_LEVEL_ERRTLS_DBG_LEVEL_DUMP: 定义不同级别的调试开关.
  • TLS_GENERAL_DBG: 定义通用调试信息开关.

调试输出宏定义

根据 TLS_DBG_SIMPLE 的值, 定义不同的调试输出宏:

#if TLS_DBG_SIMPLE
#define __TLS_DBGPRT_INFO (fmt,  . . . )        printf (fmt,  ##__VA_ARGS__) 
#define __TLS_DBGPRT_WARNING (fmt,  . . . )     printf (fmt,  ##__VA_ARGS__) 
#define __TLS_DBGPRT_ERR (fmt,  . . . )         printf (fmt,  ##__VA_ARGS__) 
#else
#define __TLS_DBGPRT_INFO (fmt,  . . . )                      \
do {                                                         \
       u32 time = tls_os_get_time () ;                      \
       printf ("[WM_I]  "%d. %02d"  %s :  "fmt,   (time/100) ,   (time%100) ,  __func__ ,  ##__VA_ARGS__) ;  \
} while  (0) 

#define __TLS_DBGPRT_WARNING (fmt,  . . . )                      \
do {                                                         \
       u32 time = tls_os_get_time () ;                      \
       printf ("[WM_W]  "%d. %02d"  %s :  "fmt,   (time/100) ,   (time%100) ,  __func__ ,  ##__VA_ARGS__) ;  \
} while  (0) 

#define __TLS_DBGPRT_ERR (fmt,  . . . )                      \
do {                                                         \
       u32 time = tls_os_get_time () ;                      \
       printf ("[WM_E]  "%d. %02d"  %s :  "fmt,   (time/100) ,   (time%100) ,  __func__ ,  ##__VA_ARGS__) ;  \
} while  (0) 
#endif
  • 如果 TLS_DBG_SIMPLE 为 1, 则使用简单的 printf 输出调试信息.
  • 否则, 输出带有时间戳和函数名的调试信息.

调试信息输出宏

根据不同的调试级别和通用调试开关, 定义不同的调试信息输出宏:

#if  (TLS_GENERAL_DBG && TLS_DBG_LEVEL_INFO) 
#define TLS_DBGPRT_INFO (f,  a. . . )      __TLS_DBGPRT_INFO (f,  ##a) 
#else
#define TLS_DBGPRT_INFO (f,  a. . . ) 
#endif

#if  (TLS_GENERAL_DBG && TLS_DBG_LEVEL_WARNING) 
#define TLS_DBGPRT_WARNING (f,  a. . . )   __TLS_DBGPRT_WARNING (f,  ##a) 
#else
#define TLS_DBGPRT_WARNING (f,  a. . . ) 
#endif

#if  (TLS_GENERAL_DBG && TLS_DBG_LEVEL_ERR) 
#define TLS_DBGPRT_ERR (f,  a. . . )       __TLS_DBGPRT_ERR (f,  ##a) 
#else
#define TLS_DBGPRT_ERR (f,  a. . . ) 
#endif

#if  (TLS_GENERAL_DBG && TLS_DBG_LEVEL_DUMP) 
void    TLS_DBGPRT_DUMP (char *p,  u32 len) ; 
#else
#define TLS_DBGPRT_DUMP (p,  len) 
#endif
  • TLS_DBGPRT_INFO: 输出信息级别的调试信息.
  • TLS_DBGPRT_WARNING: 输出警告级别的调试信息.
  • TLS_DBGPRT_ERR: 输出错误级别的调试信息.
  • TLS_DBGPRT_DUMP: 输出内存转储信息.

总结

wm_debug. h

文件提供了一套灵活的调试信息输出机制, 通过宏定义可以方便地控制调试信息的输出级别和格式. 根据项目需求, 可以开启或关闭不同级别的调试信息, 以便在开发和调试过程中获取必要的信息.

找到具有 2 个许可证类型的类似代码

2 条评论

发布
问题