繼此前推出的在線模擬器之后,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即可,非常方便。