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
标签:function,10,end,nil,学习,LUA,print,table From: https://www.cnblogs.com/xsl-blogs/p/17789828.html不支持自增自减 += -= 这些