[日誌級別] 檔名 : 日誌資訊
例:[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的...