Luat核心#
基本信息#
起草日期: 2019-11-25
设计人员: wendal
Luat核心是怎么个存在#
总得来说, Luat核心就是运行luat脚本的最基本设施及核心流程
最基本的设施包含#
Lua虚拟机 – 负责解析和执行脚本
消息总线 – 与宿主rtos系统进行单向信息传递
文件系统 – 读写文件,对核心来说,是读取lua脚本
定时器 – 脚本内的延时机制
核心流程(Lua表达)#
基于消息总线的响应式处理
while 1 do
local msgtype, msgdata = rtos.receive(0)
if msgtype and handlers[msgtype] then
handlers[msgtype](msgtype, msgdata)
end
end
逐行描述
-- 最外层,是一个无穷循环, 除非出错,否则永不退出
while 1 do
-- 从消息队列接收信息, 无限等待
-- msgtype是消息的类型,总是一个数值
-- msgdata是消息的内容,不一定存在
local msgtype, msgdata = rtos.recv(0)
-- handlers是消息处理器的table
if msgtype and handlers[msgtype] then
-- 如果存在对应msgtype的处理器,则执行之
handlers[msgtype](msgtype, msgdata)
end
end
核心流程(C层面)#
void l_rtos_recv(luaState* L) {
rtos_msg msg;
uint32_t re;
re = luat_msgbus_get(&msg, lua_checkint(L, 1));
if (re) {
// TODO喂狗
}
else {
msg.handler(L);
}
}
关于msg.handler#
为了隔离具体处理逻辑, msg包含msg.ptr和msg.handler两部分
注意, 没有msg.id, 这部分数据由msg.handler回调函数自行设置到lua栈
msg.ptr是msg.handler所需要的数据,通过luat_msgbus_data隐式传递.
相关知识点#
定时器
消息总线
文件系统