我知道这不是什么新鲜事,并且已经做过好几次了。但我正在寻找一些引用实现(甚至只是引用设计)作为“最佳实践指南”。我们有一个实时嵌入式环境,其想法是能够使用“调试 shell ”来调用一些命令。示例:“SomeDevice print reg xyz”将请求SomeDevice子系统打印名为xyz的寄存器的值。
最佳答案
我有一小组例程,基本上由 3 个函数和一个查找表组成:
- 一个收集命令行的函数 - 它很简单;没有命令行历史记录或任何东西,只有退格键或按转义键放弃整个内容的能力。但如果我认为需要更高级的编辑功能,那么在这里添加它们也不会太难。
- 一个解析一行文本 argc/argv 样式的函数(有关这方面的一些想法,请参阅 Parse string into argv/argc)
一个函数,它接受解析的命令行上的第一个参数,并在命令和函数指针表中查找它,以确定为该命令调用哪个函数,因此命令处理程序只需要匹配原型(prototype):
int command_handler( int argc, char* argv[]);
然后使用适当的 argc/argv 参数调用该函数。
实际上,查找表还包含指向每个命令的基本帮助文本的指针,如果该命令后面带有“-?”或者 '/?'显示那段帮助文本。另外,如果“help”用于命令,则命令表将被转储(如果将参数传递给“help”命令,则可能仅是一个子集)。
抱歉,我无法发布实际的源代码 - 但它的实现非常简单直接,并且功能足以满足我在嵌入式系统开发中的几乎所有命令行处理需求。
关于shell - 对于嵌入式系统的命令行实现,是否有任何好的引用实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914542/