前言
还在困扰如何更方便、快捷的学习luatos?还在困扰因硬件的限制无法学习luatos?有了win32,妈妈再也不怕我学不会luatos了~~~
介绍
win32,一个基于Windows的luatos的bsp,抛弃硬件限制,电脑上就能编译出luatos.exe执行程序,双击即可使用luatos的功能,task,log,shell,json,crypto,zbuff,fatfs,lfs2,lvgl,模拟gpio,模拟spi,后续增加串口,网络等等luatos组件,让你无需硬件轻轻松松学会luatos,调试也极其方便!!!
-
底层FreeRTOS Kernel V10.4.3(源码位于LuatOS\components\freertos)
-
编译环境msys, 工具cmake/make/gcc(下载链接见后文)
-
文件系统,win32原生文件系统,以工作目录为基点
-
默认luavm和rtos内存分配均为 1MByte
编译准备
可以自行下载msys,安装gcc和make
相关命令:
pacman -Sy 更新软件包数据
pacman -Syu 更新所有
pacman -Ss xx 查询软件xx的信息
pacman -S xx 安装软件xx
pacman -S make
pacman -S mingw-w64-i686-gcc
pacman -S cmake
也可直接下载集成好的环境 提取码:luat,下载后解压到任意盘就可以
下载cmake并安装,这里以c:Program Files\CMake目录为例
打开解压出来的msys64目录,
打开mingw32.exe
之后cd到你的win32目录下
先别着急编译,我们先看看目录下的build_cmake.sh文件
很简单是不是,只做了指定源码路径和 build路径,如果你的cmake安装在别的目录,在这里修改即可,make -j是并行编译,你的电脑是12核心就可以改成这j12
echo done表示编译完在屏幕上输出done
我们执行./build_cmake.sh开始编译
编译完成,会在build目录下生成luatos.exe,至此编译完成
使用
新建一个目录,目录下新建一个main.lua,这就是我们的主代码,我们写入以下代码:
local sys = require "sys"
log.info("sys", "from win32")
sys.taskInit(function ()
while true do
log.info("hi", os.date())
log.info("sys", rtos.meminfo("sys"))
log.info("lua", rtos.meminfo("lua"))
sys.wait(1000)
end
end)
sys.run()
将luatos.exe拷贝到当前目录下双击即可,可以看到效果:
程序运行起来了
再比如我们使用lvgl,以win32根目录下的main.lua为例:
local sys = require "sys"
log.info("sys", "from win32")
sys.taskInit(function ()
sys.wait(1000)
--初始化lvgl,可自定义尺寸如:log.info("lvgl", lvgl.init(480,320))
log.info("lvgl", lvgl.init())
--创建obj以及按键文本
lvgl.disp_set_bg_color(nil, 0xFFFFFF)
local scr = lvgl.obj_create(nil, nil)
local btn = lvgl.btn_create(scr)
local btn2 = lvgl.btn_create(scr)
lvgl.obj_align(btn, lvgl.scr_act(), lvgl.ALIGN_CENTER, 0, 0)
lvgl.obj_align(btn2, lvgl.scr_act(), lvgl.ALIGN_CENTER, 0, 50)
local label = lvgl.label_create(btn)
local label2 = lvgl.label_create(btn2)
lvgl.label_set_text(label, "LuatOS!")
lvgl.label_set_text(label2, "Hi")
-- 二维码测试
--local qrcode = lvgl.qrcode_create(scr, 100, 0x3333ff, 0xeeeeff)
local qrcode = lvgl.qrcode_create(scr, 100)
lvgl.qrcode_update(qrcode, "https://luatos.com")
lvgl.obj_align(qrcode, lvgl.scr_act(), lvgl.ALIGN_CENTER, -100, -100)
-- gif 加载测试
local gif = lvgl.gif_create(scr, "/example.gif")
if gif then
lvgl.obj_align(gif, lvgl.scr_act(), lvgl.ALIGN_CENTER, 100, -100)
end
-- switch组件测试
local sw = lvgl.switch_create(scr, nil)
lvgl.obj_align(sw, lvgl.scr_act(), lvgl.ALIGN_CENTER, 100, 0)
--显示scr
lvgl.scr_load(scr)
--设置按键回调
lvgl.obj_set_event_cb(btn, function(obj, event)
log.info("event", obj, event)
end)
while true do
lvgl.obj_align(btn2, lvgl.scr_act(), lvgl.ALIGN_CENTER, 0, 50)
lvgl.switch_toggle(sw, 1)
sys.wait(500)
lvgl.obj_align(btn2, lvgl.scr_act(), lvgl.ALIGN_CENTER, 50, 50)
lvgl.switch_toggle(sw, 1)
sys.wait(500)
end
end)
sys.run()
确保要显示的example.gif在同目录下
双击luatos运行:
还有其他demo在module_test目录下可自行查看
其他lvgl demo:
修改代码直接修改重新编译即可,因为使用的cmake,如增加,删除代码文件直接修改CMakeLists.txt即可,非常方便
大家熟悉之后可以尝试适配bsp/win32的uart接口,奖励200元呦~~~