【发布时间】:2018-07-26 22:02:37
【问题描述】:
我在 C 应用程序(嵌入式环境/MCU)中使用 Lua v5.2.2。
我需要在 Lua 中公开一些“参数”,对于读取和写入,您需要直接访问硬件(因此需要 C 调用)。但是,我正在寻找其他方法来实现这一点,而不是使用普通的旧 getter 和 setter。
我主要在探索 Lua 的元编程能力,但我也相信我可以为用户创建一个更简单的界面。
我想要实现的是如下行为:
my_param = createParameter{name="hw_param1", type="number", min=0, max=100}
my_param = 5
result = my_param + 3
在第一行创建了一个新参数。这是对 C 函数的调用。使用正确初始化的结构将用户数据推送到堆栈。硬件也会根据需要进行初始化。返回一个新表。
在第二行,对参数对象进行了赋值。我希望它使用单个参数(赋值参数)调用 C 函数,因此可以将值存储到硬件寄存器中。
在第三行读取参数。我再次需要调用一个 C 函数,该函数将从硬件寄存器中获取参数的值,然后返回结果。
注意这个参数的实际值可能会在Lua范围之外发生变化,所以在初始化时读取一次值是不正确的。每次都必须调用 C 函数才能获取实际值。同样,写入值必须立即写入硬件。
我怎样才能做到这一点?具体来说,我可以改变参数的元表来实现第 2 行和第 3 行吗? (我知道如何实现第 1 行)。
还有必要从构造函数返回一个表吗?例如,我可以返回一个与上述行为类似的原始 Lua 类型(例如数字)吗?
【问题讨论】: