我的微控制器有一个 RS232 接口,带有一组预定义的命令。有数百个命令,例如PRESSURE 50
可设定压力为50;LIMIT 60
可以将限制设置为 60。
目前,这是使用一系列嵌套的 switch 语句来处理的,但这似乎是一个不优雅的解决方案。
处理这些命令的推荐/最有效/最可读的方法是什么? LUT 将是最整洁的,但肯定会有很多不存在的字母组合的空条目(不理想......)。
感谢您的任何想法..
-
运行时建议:
使用 struct { 字符串,函数指针 ) 的排序数组
- 排序qsort() http://www.cplusplus.com/reference/cstdlib/qsort/
- 检索者搜索() http://www.cplusplus.com/reference/cstdlib/bsearch/
I hope qsort()
and bsearch()
在您的平台上可用(stdlib.h
)
-
设计时建议:
正如评论所建议的,最好在设计时对数组初始化的条目进行排序。存在很多方法,从代码生成(豪华)到宏处理(差)。
申报建议,一进多出:
typedef unsigned char byte;
typedef char commandId_t[40];
typedef void (*commandHandler_t)( const byte * payload );
typedef struct command_s {
const commandId_t commandId;
const commandHandler_t handler;
} command_t;
static const command_t commands[] = {
#include "sortedCommandInitializers"
};
文件sortedCommandInitializers
是一个列表{"command-name", function-name},
可以通过命令排序sort CommandInitializers.c > sortedCommandInitializers
在 Makefile 中。
For make
它与其他依赖项一样:
sortedCommandInitializers: CommandInitializers.c
sort CommandInitializers.c > sortedCommandInitializers
myProgram.o: myProgram.c myProgram.h sortedCommandInitializers
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)