關於 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_INFOTLS_DBG_LEVEL_WARNINGTLS_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 條評論

發布
問題