我想将c数组传递给正在运行的lua脚本。 c数组是具有16Bit值的uin32_t。如此高低的字具有1024个uint32_t值。因此,2048个16位值。
当我达到512 uint32_t值时,lua代码引发LUA_ERRMEM错误,原因是没有更多的可用内存。这绝对是可能的,因为我的应用程序在STM32F2XX µC上运行。
我确实会在每次迭代中调用lua_checkstack,并分配20个额外的堆栈插槽。因此,从理论上讲,堆栈应始终足够大。但是,如果不能重新分配更多的内存,则不会。
所以我的想法是,将其放置在外部存储器中,但我不知道如何。我已经有一个适用于外部PSRAM的链接器部分,但是我不能只在某处做attribute(((section(“ .psram”)))),对吧?
所以我需要编写自己的lua_newstate函数吗?还是有其他方法可以将lua堆栈放置在我想要的地方?
Lua堆栈只是lua对象之一。分配器动态分配的每个对象的内存。通常,Lua使用函数realloc
和free
,请看source code here
您可以编写自己的分配器,可以更改realloc
和free
的行为以使用PSRAM。如何执行此操作-另一个有趣的问题。
P.S。探索Lua源代码:它不那么大而且内容丰富。