Lua 共存于裸机嵌入式 c 应用程序中

标签 lua embedded

我正在调查是否可以让 lua 与我的实时嵌入式应用程序共存。我想使用 lua,以便客户可以在应用程序中制作自定义命令。所有的 I/O 都由主应用程序完成。所以 lua 只需要与主 C 应用程序通信。据我了解,这不是问题。
我在想主应用程序生成一个事件,然后启动一个自定义 lua 应用程序。

如何防止它使用所有 cpu 时间,例如在无限循环中。我该如何解决? (超时错误什么的)
是否可以减少 lualib 的代码大小?

谢谢,
电动汽车

最佳答案

How do I prevent it to use all the cpu time, for example in an endless loop. how do I solve that? (timeout error or something)



以尽可能低的线程优先级运行 Lua 进程,这样如果用户代码有“忙循环”,它可能会被任何其他线程抢占。如果您有其他具有相同优先级的线程,则需要确保尽可能在调度程序中启用时间片。

你也可以实现一个 Lua 进程看门狗——一个更高优先级的任务,它监视 Lua 进程的事件,如果它忙于等待,可以终止它。这可以在不以任何方式改变 Lua 的情况下实现,方法是在空闲任务循环中增加一个计数器,并按如下方式安排任务优先级:
 -----------------
| All other tasks |
|      ...        |
|-----------------|
| Lua watchdog    |
|-----------------|
| Lua             |
|-----------------|
| Idle            |
 -----------------

如果 Lua 看门狗观察到空闲计数器停止增加的时间过长,那么 Lua 进程就会停止并且看门狗必须采取纠正措施 - 杀死 Lua 进程/线程,恢复资源或发出警告消息。

And is it possible to reduce the code size of the lualib?



考虑使用 eLua与其自己移植Desktop Lua,不如考虑NodeMCU project FAQ 中描述的技术。 .

关于Lua 共存于裸机嵌入式 c 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48074874/

相关文章:

lua - 即使在元表中定义了 __eq ,也会进行引用相等性检查(在表上)

c++ - 嵌入式编程...一开始

c++ - GCC --gc-sections 和寻找符号依赖

user-interface - 错误 main.lua :23: attempt to index upvalue 'Menu' (a boolean value)

c - 通过 Uart ISR 更新变量而不中断分配

embedded - (STM32)删除闪存并写入闪存会出现HAL_FLASH_ERROR_PGP错误(使用HAL)

C代码从stm32F修改为stm32L

lua - 如何将可变参数传递给 lua 文件?

c#-4.0 - Lua脚本优化

lua - 如何通过引用分配lua变量