【轉】嵌入式C語言調試開關

在調試程序時,常常會用到assert和printf之類的函數,我最近作的這個工程裏就有幾百個assert,在你自認爲程序已經沒有bug的時候,就要除去這些調試代碼,應爲系統在正常運行時這些用於調試的信息是無用的,並且會佔用時間和空間。怎麼刪除呢,俺之前都是用笨方法,一個一個註釋,能用註釋也是通過改進的方法,俺最先都是刪掉以後出了問題再從新寫的,可是此次幾百個一個一個刪除的話但是要了俺的小命了,一首mp3聽完,還不到一百個。之前看過st的函數庫,老外的代碼就是規範,俺如今的代碼好多都是在st和ti那裏照搬的,呵呵。函數

下面給出最簡單的一種方法:spa

#define DEBUG #ifdef DEBUG #define PRINTF(x) printf x #else #define PRINTF(x) ((void)0) #endif

使用時,PRINTF(( "Hello World!\n\r" ));
注意這裏是兩個括號,一個會報錯的
不使用時,直接將"#define DEBUG"屏蔽掉
另一個調試時經常使用的方法是assert,仍是在一個頭文件裏,這裏用的是STM32函數庫的例子調試

#ifdef DEBUG 1 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))void assert_failed(u8* file, u32 line); #else #define assert_param(expr) ((void)0) #endif//assert_failed此函數要本身定義 #ifdef DEBUG void assert_failed(u8* file, u32 line) {while (1){ }} #endif
相關文章
相關標籤/搜索