LiteOS组件尝鲜-玩转Lua
Posted LiteOS物联网操作系统
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LiteOS组件尝鲜-玩转Lua相关的知识,希望对你有一定的参考价值。
编者按:前两期介绍了LiteOS的新特性,这一期小编给大家介绍一下Lua组件和它的执行过程。lua由于语法构造简单易懂,受到很多开发者的青睐,下面就来介绍一下它的过人之处。
Lua的介绍
Lua是由巴西里约热内卢天主教大学里的一个研究小组于1993年用标准C语言开发的一种开源、轻量、小巧的脚本语言。可以方便的嵌入到应用程序中,为其提供灵活的扩展和丰富的定制功能。它语法构造简单易懂,受到很多开发者的青睐。
Lua的特性
轻量级
可扩展
Lua没有提供很多功能,如网络,文件系统等,但它提供了丰富的扩展接口,可以直接调用C实现的接口来实现这些功能。
自动内存管理
Lua table(表)
面向对象
使用介绍
Lua组件的源代码路径为:https://gitee.com/LiteOS/LiteOS/tree/master/demos/language/lua。
在lua_demo.c中,实现将lua代码写入到/ramfs/test.lua文件中,并运行LuaMain()来执行lua脚本。(LuaMain()函数的位置在LiteOS/components/language/lua/lua-5.4.2/lua.c中。)
以下是lua_demo.c中提供的一个示例:
function max(a, b)
if (a > b) then
c = a;
else
c = b;
end
return c;
end
print("the max num is ", max(1, 2))
print("the max num is ", max(4, 3))
以上代码的作用是定义一个function,并执行它。
编译运行后,Lua Demo执行结果如下:
app init!
Hello, welcome to liteos demo!
Lua demo task start to run.
Run lua file.
the max num is 2
the max num is 4
Run lua file finished.
Lua demo task finished.
以下是Lua table使用的一个示例:
-- 初始化table1
table1 = {}
table1[1] = "table"
table1["OS"] = "LiteOS"
table1["language"] = "Lua"
print("table1 index 1 is ", table1[1])
print("table1 index OS is ", table1["OS"])
print("table1 index language is ", table1["language"])
-- lua 垃圾回收会释放内存
table1 = nil
print("table1 is ", table1)
以上代码的内容是创建一个名为table1的table,里面的key,value对应关系如下:
key value
1 "table"
"OS" "LiteOS"
"language" "Lua"
修改lua_demo.c中的g_luaData,替换为以上lua代码,修改后,Lua Demo会将以上内容写入/ramfs/test.lua文件中,并运行LuaMain()来执行lua脚本。
编译运行后结果如下所示:
app init!
Hello, welcome to liteos demo!
Lua demo task start to run.
Run lua file.
table1 index 1 is table
table1 index OS is LiteOS
table1 index language is Lua
table1 is nil
Run lua file finished.
Lua demo task finished.
以下是Lua面向对象的一个示例:
-- 通过table创建一个基类:圆、有半径、周长、面积三个属性。
Circle = {radius = 0, circumference = 0, area = 0}
-- 派生类方法new
function Circle:new(o, radius)
o = o or {}
setmetatable(o, self)
self.__index = self
self.radius = radius or 0
self.circumference = radius*2*3.14
self.area = radius*radius*3.14
return o
end
function Circle:printCircumference()
print("circumference of circle is ", self.circumference)
end
function Circle:printArea()
print("area of circle is ", self.area)
end
-- 创建对象circle1
circle1 = Circle:new(nil, 10)
-- 访问属性
print("circle1's radius is ", circle1.radius)
-- 访问成员函数
circle1:printCircumference()
circle1:printArea()
以上代码作用是定义一个Circle(圆)类,有radius(半径),circumference(周长)和are(面积)三个属性。构造方法为Circle:new(),并有两个成员函数Circle:printCircumference()和Circle:printArea()。
修改lua_demo.c中的g_luaData为以上lua代码,修改后,Lua Demo会将以上内容写入/ramfs/test.lua文件中,并运行LuaMain()来执行lua脚本。
编译运行后结果如下所示:
app init!
Hello, welcome to liteos demo!
Lua demo task start to run.
Run lua file.
circle1's radius is 10
circumference of circle is 62.8
area of circle is 314.0
Run lua file finished.
Lua demo task finished.
结 语
感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:
https://gitee.com/LiteOS/LiteOS/issues
为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如下图。
- End -
以上是关于LiteOS组件尝鲜-玩转Lua的主要内容,如果未能解决你的问题,请参考以下文章