|
本帖最后由 jorya_txj 于 2016-7-11 10:19 编辑
由于项目调试过程中,观察系统输出的打印信息是调试必不可少的一个手段,也是jlink等仿真器无所替代的。但是从众多的打印信息中挑出有价值的打印信息又是一种体力活,会浪费不少宝贵的调试时间,那有没有一种可以控制打印信息级别的方法呢?答案是肯定的。
raw-os的新版本中添加了raw_bug.h 用来实现控制打印信息级别。简略介绍如下:
#define RAW_DEBUGF(debug, message) do { \
if ( \
((debug) & RAW_DBG_ON) && \
((debug) & RAW_DBG_TYPES_ON) && \
((RAW_U16)((debug) & RAW_DBG_MASK_LEVEL) >= RAW_DBG_MIN_LEVEL)) { \
RAW_PLATFORM_DIAG(message); \
if ((debug) & RAW_DBG_HALT) { \
while(1); \
} \
} \
} while(0)
上面的打印信息中,总共有3个关口来控制打印,第一个关口是RAW_DBG_ON, 第二个关口是RAW_DBG_TYPES_ON,
第三个关口是RAW_DBG_MIN_LEVEL。
对于第一个关口是一个全局的开关,RAW_DBG_ON选择是否使能打印信息,第二个关口RAW_DBG_TYPES_ON 可能的定义如下:
#define RAW_DBG_TYPES_ON (RAW_DBG_ON | RAW_DBG_TRACE )
上面的意思是打开trace信息的打印,但是RAW_DBG_STATE 这个级别的打印则不会显现出来。
第三个关口是控制打印信息级别的输出实现,具体看如下的宏定义:
#define RAW_DBG_LEVEL_ALL 0x00
#define RAW_DBG_LEVEL_OFF RAW_DBG_LEVEL_ALL /* compatibility define only */
#define RAW_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */
#define RAW_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */
#define RAW_DBG_LEVEL_SEVERE 0x03
#define RAW_DBG_MASK_LEVEL 0x03
通过定义RAW_DBG_MASK_LEVEL 以及RAW_DBG_MIN_LEVEL 来控制打印输出不同重要级别的信息,比如控制warning,serious,
severe 这些从轻到重的级别的打印输出实现。
raw-os 的git仓库为:http://git.oschina.net/raw-os/raw-os
|
|