LUA学习
SDK架构
-
展锐8910平台底层是基于FreeRTOS写的,所以会在main中创建许多task,比如音频协议栈串口等等,LUA用到的是Lua virtual task任务,
-
脚本运行流程是,底层core通过启动Lua task运行Lua虚拟机,虚拟机会找到对应的main.lua逐行嵌套开始解析执行。main.lua最末尾一行代码为sys.run()来处理内部或外部的消息。
基础语法
不用写分号,不用写类型
-
a = 1 默认定义是全局变量,如果要取消,需要写local a = 1
-
没有声明过的值都是nil,nil是一个类型,这个类型只有nil一个值
-
所有数值都是number型
a, b ,c = 0xfe, 2e5, 8
所有的print都是以十进制打印 -
数值型可以加减乘除左右移
string
- 单引号双引号都是表示string的 支持转义字符 [[ ]] 这里括住的会被原原本本输出
- c = a..b 相当于连接两个字符串
- c = tostring(10) n = tonumer("10") 失败成nil
- /#a表示字符串a的长度
函数
- 写法
function xxx(a,b)
...
end
也可以
xxx = function(a,b)
...
end
- 函数返回值默认nil,也可以return主动设置,可以返回多个值
table
- 默认数字下标,第一个是1!!!
a = {1, "abc", function() end, {}}
table.insert(a, "b") //尾插
table.insert(a, 2, "b") //自选位置
b = table.remove(a, 5) //b返回移除的值
a[8] = 1
print(#a) //长度,比如a[8]有,但是a[7]等照样没有
- 字符串下标
a = {
a = 1,
b = "1234",
c = function() end,
["d"] = 123
}
print(a["a"])
print(a.d)
- 全局表_G
a = 1
print(_G["a"]) // 1
print(_G["table"]["insert"]) //function
分支判断
- 布尔型 true false
- ~= ≥ ≤
- a and b a or b 会直接返回a或者b的值 not a 只会返回true/false
- nil false才是假 0都是真
print(b>10 and "yes" or "no")
- 写法
if 1 > 10 then
XXX
elseif 2>10 then
XXX
else
xxx
end
循环
for i=1,10,2 do
print(i)
if i==5 then break end
end
步长也可以是负值
while n > 1 do
xxx
end
不支持自增自减 += -= 这些
require多文件调用
require("hello")
require("path.hello")
不带.lua后缀,path是另一个平行文件夹,只会运行一次,查找路径为packet.path
table的迭代器
t = {"a", "b", "c", "d"}
for i,j in ipairs(t) do
print(i,j)
end
迭代到nil自动停止,比如上面这个d就不会打印
如果是字符串下标,要改用pairs,pairs以next(t,【下标】)为基础,这个next会返回他以为的下个下标的值
string
-
string.byte(s,2) 吧字符串s的第二个的ascii码,以十进制输出(print内),语法糖 s:byte(1), 可以带俩参数表示范围,第二个参数用-1表示最后一个下标
-
string.char和byte相反,是把ascii码的十六进制数转回去
-
string.format格式化字符串,和printf语法很像
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具