继此前推出的在线模拟器之后,LuatOS再推全新BSP——基于Windows32的LuatOS仿真器。
LuatOS@Win32功能简介
LuatOS@Win32仿真器——是一个基于Windows32的LuatOS全新bsp,抛弃硬件限制,电脑可直接编译出luatos.exe执行程序,双击即可使用LuatOS的功能。
目前已涵盖Task、Log、Shell、Json、Crypto、Zbuff、FatFs、Lfs2、LVGL、模拟GPIO、模拟SPI等功能,后续将陆续增加串口、网络等等LuatOS组件。
无需硬件,轻松调试!随时随地学习、应用,开发更便捷。
-
底层FreeRTOS Kernel V10.4.3;
源码位于LuatOS\components\freertos
-
编译环境msys,工具cmake/make/gcc;
-
文件系统:win32原生文件系统,以工作目录为基点;
-
默认luavm和rtos内存分配均为1MByte。
LuatOS@Win32编译说明
2.1 Msys环境设置
● 通过官方下载msys,并安装好gcc和make:
https://www.msys2.org/
相关命令:
pacman -Sy 更新软件包数据
pacman -Syu 更新所有
pacman -Ss xx 查询软件xx的信息
pacman -S xx 安装软件xx
pacman -S make
pacman -S gcc
pacman -S cmake
● 也可直接下载集成好的环境,下载后解压到任意盘就可以:
https://pan.baidu.com/share/init?surl=LwAU9t7HPL8kD7sBj3fFZQ
提取码:luat
2.2 Cmake工具使用
Cmake官网下载独立的Cmake最新版并安装,本文演示以C:\Program Files\CMake目录为例。
Cmake官网:https://cmake.org/
打开解压出来的msys32目录:
双击运行mingw32.exe:
之后cd到你的Win32目录下:
2.3 进行LuatOS编译
这里先别着急编译,我们先看看目录下的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拷贝到当前目录下双击即可,可以看到程序运行起来的效果:
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目录下查看选用,代码直接修改重新编译即可。因为使用cmake,如需增加/删除代码文件,直接修改CMakeLists.txt即可,非常方便。