如何将Lua堆栈放置在外部PSRAM上

我想将一个C数组传递给正在运行的Lua脚本。该C数组是带有16位值的uin32_t。因此,高位和低位包括1024个uint32_t值,即2048个16位值。

当我达到512的uint32_t值时,Lua代码会抛出LUA_ERRMEM错误,因为没有更多的内存可用。 这是完全可能的,因为我的应用程序运行在STM32F2XX微控制器上。

我每次迭代都会调用lua_checkstack,并分配20个额外的堆栈槽,以此理论上堆栈应始终足够大。 但是,在无法重新分配更多内存的情况下,实际并非如此。

因此,我的想法是将其放置在外部内存中,但我不知道如何操作。 我已经为外部PSRAM编写了工作的链接器部分,但是我不能只是在某个地方使用attribute ((section (".psram"))),对吧?

那么,我需要编写自己的lua_newstate函数吗?或者有没有另一种将Lua堆栈放置在我想要的位置的方法?

点赞
用户4950336
用户4950336

Lua 栈只是 Lua 对象之一。每个对象的内存是由分配器动态分配的。通常 Lua 使用函数 reallocfree,可以在这里查看源代码。

你可以编写自己的分配器,可以改变 reallocfree 的行为以使用 PSRAM。如何实现这一点是另一个有趣的问题。

P.S. 探索 Lua 源代码:它并不大,但很丰富。

2019-10-08 22:52:25