LUA学习

SDK架构

  1. 展锐8910平台底层是基于FreeRTOS写的,所以会在main中创建许多task,比如音频协议栈串口等等,LUA用到的是Lua virtual task任务,

  2. 脚本运行流程是,底层core通过启动Lua task运行Lua虚拟机,虚拟机会找到对应的main.lua逐行嵌套开始解析执行。main.lua最末尾一行代码为sys.run()来处理内部或外部的消息。

基础语法

不用写分号,不用写类型

  1. a = 1 默认定义是全局变量,如果要取消,需要写local a = 1

  2. 没有声明过的值都是nil,nil是一个类型,这个类型只有nil一个值

  3. 所有数值都是number型
    a, b ,c = 0xfe, 2e5, 8
    所有的print都是以十进制打印

  4. 数值型可以加减乘除左右移

string

  1. 单引号双引号都是表示string的 支持转义字符 [[ ]] 这里括住的会被原原本本输出
  2. c = a..b 相当于连接两个字符串
  3. c = tostring(10) n = tonumer("10") 失败成nil
  4. /#a表示字符串a的长度

函数

  1. 写法
function xxx(a,b)
...
end

也可以

xxx = function(a,b)
...
end
  1. 函数返回值默认nil,也可以return主动设置,可以返回多个值

table

  1. 默认数字下标,第一个是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]等照样没有
  1. 字符串下标
a = {
	a = 1,
	b = "1234",
	c = function() end,
	["d"] = 123
}
print(a["a"])
print(a.d)
  1. 全局表_G
a = 1
print(_G["a"])  // 1
print(_G["table"]["insert"]) //function

分支判断

  1. 布尔型 true false
  2. ~= ≥ ≤
  3. a and b a or b 会直接返回a或者b的值 not a 只会返回true/false
  4. nil false才是假 0都是真
  5. print(b>10 and "yes" or "no")
  6. 写法
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

image

  1. string.byte(s,2) 吧字符串s的第二个的ascii码,以十进制输出(print内),语法糖 s:byte(1), 可以带俩参数表示范围,第二个参数用-1表示最后一个下标

  2. string.char和byte相反,是把ascii码的十六进制数转回去

  3. string.format格式化字符串,和printf语法很像

posted @   __Zed  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示