#ifndef __COMMAND_H_ #define __COMMAND_H_ #ifdef __cplusplus extern "C" { #endif #define SECTION(x) __attribute__((section(x))) #define UNUSED __attribute__((unused)) #define USED __attribute__((used)) #define ALIGN(n) __attribute__((aligned(n))) #define WEAK __attribute__((weak)) //##后的参数本身也是一个宏的话,##会阻止这个宏的展开,也就是只替换一次,故需要中继 #define __command_func_line_connect_(func, line) func##line #define __command_func_line_define_(func, line) __command_func_line_connect_(func, line) #define __command_func_line_(func, line) __command_func_line_define_(func, line) extern void * __start_command; extern void * __stop_command; #define CMD_LENGTH(x) (sizeof(x)/sizeof(x[0])) //声明command_func为函数指针 typedef void (*command_func)(int argc, char *argv[]); //定义命令结构体 typedef struct cmd { char *cmd_name; //命令名称 command_func cmd_func;//命令处理函数 }command_t; #define __command_initialize(cmd, func) USED SECTION("command") ALIGN(sizeof(void*)) \ command_t __command_func_line_(func, __LINE__) = {cmd, func} //分析、分配命令 extern int execute_command(char *command, command_t *list, int list_size); #ifdef __cplusplus } #endif #endif