嵌入式log列印格式輸出技巧

2021-10-02 17:22:28 字數 2190 閱讀 5263

[日誌級別] 檔名 : 日誌資訊

例:[info] main.c : init ok!

例:[debug] adc.c : adc_getvalue -> 3.3v

[ 檔名] 日誌級別 : 日誌資訊

例:[ main] info : init ok!

例: [ adc] debug : adc_getvalue -> 3.3v

因為在進行微控制器開發的過程中,需要大量的 log 資訊,但是在開發結束後,一直列印log會拖慢微控制器的速度,所以在開發完成後需要關閉log。

在標頭檔案中新增:

#define _debug_ 1 

//列印log資訊,不想列印時改為0即可

再把.c 檔案中將所有的printf包裹上#if _debug_#endif

#if _debug_

printf

("test");

#endif

#ifdef _debug_

#define user_printf(s,...) printf(s"\r\n",##__va_args__)

#define user_info(format,...) printf("[info] %s() %d "format"\r\n",__func__,__line__,##__va_args__)

#define user_error(format,...) printf("[error] %s %s()%d "format"\r\n",__file__,__func__,__line__,##__va_args__)

#else

#define user_printf(s,...)

#define user_info(s,...)

#define user_error(format,...)

#endif

使用可變引數巨集不僅達到了**的格式化,同時也完成了條件編譯,不用每次列印都包裹上#if _debug_#endif

列印效果如下:

__date__
進行預處理的日期(「mmm dd yyyy」形式的字串文字)

__file__
代表當前源**檔名的字串文字

__line__
代表當前源**中的行號的整數常量

__time__
原始檔編譯時間,格式微「hh:mm:ss」

__func__
當前所在函式名

void

dbg_hexarray

(char

*title,

unsigned

char

*buf,

unsigned

int sz)

for(i =

0; i < sz; i++

)printf

("%02x ",(

unsigned

int)buf[i]);

if(((i+1)

%8)==

0)}if

((i%8)

!=0)}

列印效果如下:

unsigned

char buff[10]

=;dbg_hexarray

("buff:"

,buff,10)

;

嵌入式linux除錯技巧

1 列印往往是最常用的除錯技巧。除錯核心和驅動都可以採用printk。在kernel.h include linux 中定義了log的等級。未指定日誌級別的 printk 採用的預設級別是 default message loglevel,這個巨集在kernel printk.c 中被定義為整數 4...

嵌入式如何使用printf列印

我們在程式中使用printf把需要列印的資訊列印到控制台上,那麼在嵌入式中如何用printf來輸出列印資訊呢?有兩種方法 其一,把fput 函式重新定義 因為printf 會呼叫fputc 函式向控制台發資料,我們將fputc 重定義,在該函式裡邊用串列埠發資料,所以當我們呼叫printf 時,就可...

嵌入式檔案格式說明

檔案格式 1 bin檔案 binary檔案,即二進位制檔案。bin目錄用來儲存專案生成後程式集,它有debug和release兩個版本,分別對應的資料夾為bin debug和bin release,這個資料夾是預設的輸出路徑,我們可以通過 專案屬性 配置屬性 輸出路徑來修改。2 hex檔案 hex的...