推薦一個(gè)實(shí)用的嵌入式日志開(kāi)源項(xiàng)目 dbuglib
ulog日志記錄庫(kù)是一個(gè)精小的靜態(tài)日志記錄庫(kù)。內(nèi)部很多功能均由宏定義來(lái)實(shí)現(xiàn)。用戶可以修改日志的級(jí)別用于過(guò)濾特定級(jí)別的日志。
文件ulog.h:定義了各種日志記錄級(jí)別和日志記錄宏
ulog.c:提供了內(nèi)存打印等接口函數(shù)
ASSERT.h:提供了用戶可定義的斷言宏支持
VS文件夾:VC上位機(jī)測(cè)試示例
MDK文件夾:MDK下位機(jī)測(cè)試示例
ulog支持5種日志記錄級(jí)別,可在ulog.h文件中修改LOG_CFG_LEVE宏定義來(lái)定義日志的記錄級(jí)別。
G_DEBUG:調(diào)試日志級(jí)別,用來(lái)記錄最詳細(xì)的調(diào)試信息和執(zhí)行步驟
G_TRACE:跟蹤日志級(jí)別,用來(lái)記錄重要的跟蹤信息
G_WARNG:警告日志級(jí)別,用來(lái)記錄一些警告信息
G_ERROR:錯(cuò)誤日志級(jí)別,用來(lái)記錄嚴(yán)重的錯(cuò)誤信息
G_NONE:不做任何日志記錄
定義日志記錄樣式示例1:將LOG_CFG_LEVE配置為G_WARNG級(jí)別,則只會(huì)顯示G_WAGNG和G_ERROR兩個(gè)級(jí)別的日志記錄,其他的記錄級(jí)別較低將不被顯示 示例2:配置為G_NONE級(jí)別將禁用日志記錄功能
在ulog.h文件中定義了LOG_FUN宏,用戶可以對(duì)其修改來(lái)改變?nèi)罩镜拇蛴邮?/span>
// 定義打印樣式使用方式
#define LOG_FUN(LEVESTR,format, ...)
LOG_PRINTF("["LEVESTR"] <"__FILE__": %d"">: " format "rn",__LINE__,##__VA_ARGS__)
ASSERT_MSG(, ); uLOG(G_DEBUG,,); uLOG_MEM(G_DEBUG, randbuff, , ,);
打印數(shù)據(jù)如下:
[G_DEBUG] <main.c: 16>: error:123 [G_DEBUG] <main.c: 17>: error:586 00000000: 29 23 BE 84 E1 6C D6 AE 52 90 49 F1 F1 BB E9 EB )#...l..R.I..... 00000010: B3 A6 DB 3C 87 0C 3E 99 24 5E 0D 1C 06 B7 47 DE ...<..>.$^....G. 00000020: B3 12 4D C8 43 BB 8B A6 1F 03 5A 7D 09 38 25 1F ..M.C.....Z}.8%. 00000030: 5D D4 CB FC 96 F5 45 3B 13 0D 89 0A 1C DB AE 32 ].....E;.......2 00000040: 20 9A 50 EE 40 78 36 FD 12 49 32 F6 9E 7D 49 DC .P.@x6..I2..}I. 00000050: AD 4F 14 F2 44 40 66 D0 6B C4 30 B7 32 3B A1 22 .O..D@f.k.0.2;." 00000060: F6 22 91 9D E1 8B 1F DA B0 CA 99 02 B9 72 9D 49 ."...........r.I 00000070: 2C 80 7E C5 99 D5 E9 80 B2 EA C9 CC 53 ,.~.........S
以上為程序的使用示例,說(shuō)明如下:
uLOG:指定日志級(jí)別和相應(yīng)的字符串,其支持printf類(lèi)似的轉(zhuǎn)移修飾符
uLOG_MEM:可打印指定的內(nèi)存數(shù)據(jù),同樣需要指定日志級(jí)別,
ASSERT:該宏當(dāng)參數(shù)為假時(shí)會(huì)停止程序,并打印顯示當(dāng)前導(dǎo)致斷言的文件和行號(hào)
ASSERT_MSG:與ASSERT相同,只不過(guò)多了個(gè)字符串參數(shù),可以顯示一些信息。
該庫(kù)編寫(xiě)時(shí)使用了一些C99特性,所以編譯器必須支持C99標(biāo)準(zhǔn)。已經(jīng)在VS2015和MDK5.0中測(cè)試,均可正常工作。移植時(shí)必須定義LOG_PRINTF宏到實(shí)際的打印函數(shù),還必須定義LOG_PUT_CHAR宏到實(shí)際的字符輸出函數(shù):
// 字符輸出函數(shù)
#define LOG_PUT_CHAR(C) putchar(C)
// 日志記錄接口
#define LOG_PRINTF(format, ...) printf(format, ##__VA_ARGS__)
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。