我正试图创建一个后端框架,通过串行连接与硬件交互。我需要能够准确地指定这些硬件模块将如何交互,而无需重新编译和在资源有限的系统上运行
我已经有了正在重新使用的cpp代码,它与硬件交互,并具有向设备发送消息的广泛功能。
运行时影响是一个需要认真考虑的问题,它运行在一个非常有限的arch发行版上,我们不想因为硬件原因而做太多更改。
对我来说,使用一种脚本语言进行接口是最有意义的,这种语言可以很容易地生成,以具有一组对cpp库的引用,这些引用可以通过命令加载(有点像插件系统)
Python-是一个非常好的选择,但我几乎没有使用嵌入式Python的经验,我已经研究过了,我想我可能会感到困惑的是,如果没有像pybind11和嵌入式Python这样的东西同时工作,解释的脚本将如何链接到原始程序中的功能。宾德当然有吸引力。请不要助推-也许有点。
LUA-是一个经过良好测试的健壮选项,但在命令下生成有点困难。LuaBridge也有我想要的功能。最大的担忧是运行时的影响,但我当然不是专家。
只需在cpp中完成整个操作,并像普通人一样加载库-实心选项,但可能是最难生成和轻松运行语法检查的选项。
用脚本语言完成整个过程,并消除编译器的开销-我的意思是,从技术上讲,这是的一个选项
当然,这些并不是所有的选择,但这远远超出了我的专业领域,我认为讨论一下会很有益。
我真的很想知道我应该花时间研究什么。我已经花了太多时间研究pybind了,我发现自己晚上睡不安稳。
理想情况下,此工作流程运行方式如下:
在主控制器上:
-
运行接口程序(cpp)
-
接口程序进行诊断并检查模块状态(已完成)
-
接口检查运行脚本以执行模块功能
脚本:
-
从某些源生成
-
运行测试以验证生成没有语法错误
-
被移到接口程序可以抓取的文件夹中(以"完全"安全的方式)我在开玩笑,我知道该设置的问题,但我们现在没有考虑它
那太长了,很抱歉,我只是非常失落,超出了我的舒适区。
是的,很抱歉我没有澄清为什么生成的代码很重要。我们构建了一个非常简单的顶层gui来与硬件交互,并且需要将其转换为脚本来与控制器的主界面交互。
我昨晚想出的另一个选择:
编写一个非常简单的自定义脚本语言,我可以在cpp端解析它并以这种方式链接
如果您正在生成一个脚本,您可能会将事情简化为一个简单的字节码,然后进行解释。这样您就不必麻烦解析或语法验证了。每个"指令"可以是一个简单的操作码,后面跟着零个或多个操作数,其中每个操作数都是整数、浮点或字符串(以及硬件支持/需要的任何其他基元数据类型)。您可以使用类似msgpack的东西来紧凑地编码和解码指令。
如果该模型有效,您可以逐渐在开发人员端添加工具,例如最小汇编器,甚至是生成字节码的脚本解释器,从而避免受限硬件环境中的任何复杂性。