今天在看FreeRTOS代码看到如下代码:
开机初始化:
log_create_module(template, PRINT_LEVEL_INFO);
宏定义:
#define log_create_module(_module, _level) \
log_control_block_t log_control_block_##_module = \{ \
#_module, \
(DEBUG_LOG_ON), \
(_level), \
print_module_log, \
dump_module_buffer \
}
#endif /* MTK_DEBUG_LEVEL_NONE */
此部分利用#difine宏定义一个类型为log_control_block_t 的log_control_block_##_module 并做初始化
在#define中,标准只定义了#和##两种操作。#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串。
以下是log_control_block_t的结构体定义:
/**
* @brief log context definition
*/
typedef struct {
const char *module_name;
log_switch_t log_switch;
print_level_t print_level;
f_print_t print_handle;
f_dump_buffer_t dump_handle;
} log_control_block_t;