3

我正在使用功能强大的 32 位微控制器 STM32F4(具有 192K RAM 和 1024K 闪存)做一个项目。我正在使用 C。我希望创建的系统由这个控制器(我称之为“主机”)和一个小模块(“客户端”)组成。

客户端只包含一个内存库和一个 LED 控制器,它们都使用相同的数据线 (I2C) 连接到主机。主机可以从内存中读取并发送命令来控制客户端上的 LED 输出。

我希望能够直接在客户端的内存上编写代码。然后在运行时,主机将从客户端拉取代码并运行它——代码将被限制为做两件事:

  • 以任意方式操作变量
  • 根据这些变量向 LED 驱动器发送命令。

我想要这些限制,以便任何人都可以为客户端编写代码,而不会对主机进行恶意操作。为此,我正在寻找一种在微控制器上运行脚本语言解释器的方法。然后,客户端上的代码将是文本格式,并将在主机上进行解释。

我已经研究过 eLua,但看起来它需要我将主机上的所有 C 代码实现为 Lua 库,我想避免这种情况。有谁知道一个解决方案,我可以只连接到 I2C 库并运行简单的脚本而不会太痛苦?

如果没有,有什么东西可以让我自己构建这个简单的解释器吗?

如果需要,我可以提供任何澄清。

4

1 回答 1

0

您有两个变体在单个引擎上运行:字节码解释器。今天我发现了这个介绍视频:http ://www.youtube.com/watch?v= OjaAToVkoTw 从头开始​​制作 VM 的非常简单的教程。

还有两种变体:

  1. 交叉/目标方案:在主机(Windows/Linux/...)上运行您自己编写的编译器(flex/bison 作为第一个候选者),并轻松将使用字节码图像传输到 Cortex-M 目标,或
  2. 自托管编译器在目标 Cortex-M 上运行:(a) 以本机代码或 (b) 以字节码自身编写

作为一个最简单的变体,你可以实现 FORTH 系统——它的解析器需要唯一的词法分析器,你可以在一个小时内从头开始编写,或者通过 flex 生成。您可以找到很多 FORTH,其中一些适用于 (1) 方法:主机编译器和通过 UART 连接的目标字节码解释器。

于 2018-07-04T09:48:14.470 回答