生成代码以与不需要重新编译的正在运行的 cpp 应用程序交互的好方法是什么?

What is a good way to generate code to interface with a running cpp application that doesn't require a recompile?

本文关键字:cpp 运行 应用程序 交互 是什么 方法 代码 不需要 编译 新编译      更新时间:2023-10-16

我正试图创建一个后端框架,通过串行连接与硬件交互。我需要能够准确地指定这些硬件模块将如何交互,而无需重新编译和在资源有限的系统上运行

我已经有了正在重新使用的cpp代码,它与硬件交互,并具有向设备发送消息的广泛功能。

运行时影响是一个需要认真考虑的问题,它运行在一个非常有限的arch发行版上,我们不想因为硬件原因而做太多更改。

对我来说,使用一种脚本语言进行接口是最有意义的,这种语言可以很容易地生成,以具有一组对cpp库的引用,这些引用可以通过命令加载(有点像插件系统)

Python-是一个非常好的选择,但我几乎没有使用嵌入式Python的经验,我已经研究过了,我想我可能会感到困惑的是,如果没有像pybind11和嵌入式Python这样的东西同时工作,解释的脚本将如何链接到原始程序中的功能。宾德当然有吸引力。请不要助推-也许有点

LUA-是一个经过良好测试的健壮选项,但在命令下生成有点困难。LuaBridge也有我想要的功能。最大的担忧是运行时的影响,但我当然不是专家。

只需在cpp中完成整个操作,并像普通人一样加载库-实心选项,但可能是最难生成和轻松运行语法检查的选项。

用脚本语言完成整个过程,并消除编译器的开销-我的意思是,从技术上讲,这是的一个选项

当然,这些并不是所有的选择,但这远远超出了我的专业领域,我认为讨论一下会很有益。

我真的很想知道我应该花时间研究什么。我已经花了太多时间研究pybind了,我发现自己晚上睡不安稳。

理想情况下,此工作流程运行方式如下:

在主控制器上

  1. 运行接口程序(cpp)

  2. 接口程序进行诊断并检查模块状态(已完成)

  3. 接口检查运行脚本以执行模块功能

脚本:

  1. 从某些源生成

  2. 运行测试以验证生成没有语法错误

  3. 被移到接口程序可以抓取的文件夹中(以"完全"安全的方式)我在开玩笑,我知道该设置的问题,但我们现在没有考虑它

那太长了,很抱歉,我只是非常失落,超出了我的舒适区。

是的,很抱歉我没有澄清为什么生成的代码很重要。我们构建了一个非常简单的顶层gui来与硬件交互,并且需要将其转换为脚本来与控制器的主界面交互。

我昨晚想出的另一个选择:

编写一个非常简单的自定义脚本语言,我可以在cpp端解析它并以这种方式链接

如果您正在生成一个脚本,您可能会将事情简化为一个简单的字节码,然后进行解释。这样您就不必麻烦解析或语法验证了。每个"指令"可以是一个简单的操作码,后面跟着零个或多个操作数,其中每个操作数都是整数、浮点或字符串(以及硬件支持/需要的任何其他基元数据类型)。您可以使用类似msgpack的东西来紧凑地编码和解码指令。

如果该模型有效,您可以逐渐在开发人员端添加工具,例如最小汇编器,甚至是生成字节码的脚本解释器,从而避免受限硬件环境中的任何复杂性。