我正在调查是否可以让 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/