我正在开发一个嵌入式系统项目。它位于ARM M3-Cortex平台上。我正在使用的设备是一个测量控制器。它可以连接到PC并执行一些命令。我尝试设计命令解析器,但在互联网上看到了完全不同的方法。有超过30个命令。每个命令可以有不同的参数:例如命令日期:?将询问日期,因此设备LCD应显示日期,但命令日期:2012,05,30应设置日期。一些命令甚至更复杂并且具有不同类型的参数,即,应该智能地设计算法和数据结构。 你有任何线索或建议吗?谢谢伙伴:))
答案 0 :(得分:4)
好的,这是一件事。
您需要实施协议。我认为文本协议(因为您的命令要求:Date:?
)。如果你不想使用现有的(这真的令人困惑),你应该至少看看它们的实现和设计。
到目前为止,我高度推荐给我的是 DCON protocol (有一个PDF,但有点难以找到它,如果你有兴趣,我会为你搜索), Modbus ASCII 协议(这是一个非常好的选择和全世界使用)。接下来, Siemens SPA (串行协议ASCII)也是一个非常有用的。
如果您想实施自己的协议(假设您想要实现二进制协议),以下是设计时应考虑的要点:
0x01
用于读取线圈,0x02
用于写入线圈等。)当然,有huge bunch个这样的协议,你熟悉它们中的一些肯定会帮助你更好地设计(或使用现有的协议)。
<强>更新强>:
如果使用解析器/词法分析器(其他harald提到,因为有额外的库)来实现解析器,你一定要阅读SO问题“Is there an alternative for flex/bison that is usable on 8-bit embedded systems”。
答案 1 :(得分:4)
您似乎想要的是解析器生成器。这是一个可以非常轻松地指定命令语言语法的工具,它将生成surce代码以便为您解析此语法。如果许可证与您的工作兼容,请查看Yacc或Bison,他们应该可以为您执行此操作。
您还可以在混音中添加词法分析器(Lexx / Flexx),这样可以简化将字符流转换为词法标记,以便解析器进行咀嚼。
<强>更新强>
除了绝对最基本的解析器之外,生成器可能会让您的生活更轻松。当然,资源限制或许可问题不会受到影响。一个好的解析器生成器不应该需要比手动操作更多的资源。正如 @gahcep 在他的回答中指出的那样,Yacc和Bison还有其他替代品,包括商业替代品。也许其中一些会更适合你。
使用解析器生成器的一些优点是:
缺点是生成的代码可能难以调试,并且可能会在没有手工编写代码的情况下引入依赖关系。检查并找到最适合您和项目的那个。
祝你好运!