Browse Source

add: 提交所有型号的log代码

wangshihao 3 months ago
parent
commit
2c7301ca92

+ 59 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/log/log_test.lua

@@ -0,0 +1,59 @@
+--[[
+@module  log_test
+@summary log功能测试模块
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. log.debug 日志等级测试
+2. log.info 日志等级测试
+3. log.warn 日志等级测试
+4. log.error 日志等级测试
+
+]]
+
+local function test_log_output(level_name)
+    print(string.format("测试日志级别: %s", level_name))
+
+    log.debug(PROJECT, "debug message") 
+    log.info(PROJECT, "info message")
+    log.warn(PROJECT, "warn message")
+    log.error(PROJECT, "error message")
+end
+
+local function logtest_task()
+    -- 打印当前默认日志输出等级
+    local default_level = log.getLevel()
+    print("日志功能测试开始")
+    print(string.format("默认日志级别: %s", default_level))
+    
+    -- 实验1:使用默认日志输出等级测试
+    test_log_output(default_level)
+    
+    -- 实验2:设置为INFO级别,只输出info及以上级别的日志
+    log.setLevel("INFO")
+    test_log_output("INFO")
+    
+    -- 实验3:设置为WARN级别,只输出warn及以上级别的日志
+    log.setLevel("WARN")
+    test_log_output("WARN")
+    
+    -- 实验4:设置为ERROR级别,只输出error级别的日志
+    log.setLevel("ERROR")
+    test_log_output("ERROR")
+    
+    -- 实验5:设置为SILENT级别,完全关闭日志输出
+    log.setLevel("SILENT")
+    test_log_output("SILENT")
+    
+    -- 实验6:恢复默认日志输出等级,验证日志输出恢复
+    log.setLevel(default_level)
+    print("恢复默认日志输出等级: " .. log.getLevel())
+    
+    -- 测试不同参数类型的日志输出
+    log.info(PROJECT, "数值:", 123, "布尔值:", true, "表:", {name="test", value=456})
+end
+
+-- 启动测试任务
+sys.taskInit(logtest_task)

+ 51 - 49
module/Air780EHM_Air780EHV_Air780EGH/demo/log/main.lua

@@ -1,63 +1,65 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+日志功能测试,包括log.info、log.error、log.debug、log.warn等日志等级的测试。
+通过加载log_test模块来运行相关测试功能。
 
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "LOG"
-VERSION = "2.0.0"
+更多说明参考本目录下的readme.md文件
+]]
 
 --[[
-本demo演示 string字符串的基本操作
-1. lua的字符串是带长度, 这意味着, 它不依赖0x00作为结束字符串, 可以包含任意数据
-2. lua的字符串是不可变的, 就不能直接修改字符串的一个字符, 修改字符会返回一个新的字符串
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
 ]]
+PROJECT = "logdemo"
+VERSION = "001.000.000"
 
--- sys库是标配
-_G.sys = require("sys")
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
 
--- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
-if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
-    pm.power(pm.PWK_MODE, false)
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
 end
 
-local netLed = require("netLed")
---GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
-local LEDA= gpio.setup(27, 0, gpio.PULLUP)
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
 
-sys.taskInit(function ()
-    sys.wait(1000) -- 免得看不到日志
-    local tmp
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
 
-	--实验1:输出四个等级的日志,日志等级排序从低到高为 debug < info < warn < error
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	
-	--实验2:输出INFO及更高级别日志,即debug日志不输出
-	log.setLevel("INFO")
-	print(log.getLevel())
+-- 加载 log_test 功能模块
+require "log_test"
 
-	-- 这条debug级别的日志不会输出
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	--实验3:通过日志输出变量内容
-	local myInteger = 42
-    log.info("Integer", myInteger)
-end)
--- 这里演示4G模块上网后,会自动点亮网络灯,方便用户判断模块是否正常开机
-sys.taskInit(function()
-    while true do
-        sys.wait(6000)
-                if mobile.status() == 1 then
-                        gpio.set(27, 1)  
-                else
-                        gpio.set(27, 0) 
-                        mobile.reset()
-        end
-    end
-end)
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句
 sys.run()

+ 74 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/log/readme.md

@@ -0,0 +1,74 @@
+## 功能模块介绍
+
+1、main.lua:主程序入口,负责初始化系统环境;
+
+2、log_test.lua:日志功能测试模块,演示Air780EHM/Air780EHV/Air780EGH的日志输出功能;
+
+## 演示功能概述
+
+1、log_test:日志输出等级测试
+
+默认日志输出等级为 DEBUG,即输出 debug 及以上级别的日志;
+
+log.setLevel("INFO"): 输出 info 及以上级别的日志;
+
+log.setLevel("WARN"): 输出 warn 及以上级别的日志;
+
+log.setLevel("ERROR"): 输出 error 级别的日志;
+
+log.setLevel("SILENT"): 静默所有日志,即禁止日志有任何内容输出;
+
+## 演示硬件环境
+
+1、Air780EHM/Air780EHV/Air780EGH核心板一块:
+
+2、TYPE-C USB数据线一根,Air780EHM/Air780EHV/Air780EGH核心板和数据线的硬件接线方式为:
+
+- Air780EHM/Air780EHV/Air780EGH核心板通过TYPE-C USB口供电,核心板正面的 ON/OFF 拨动开关 拨到ON一端;
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、固件获取地址:
+
+[Air780EHM 固件](https://docs.openluat.com/air780epm/luatos/firmware/version/#air780ehmluatos)
+
+[Air780EHV 固件](https://docs.openluat.com/air780ehv/luatos/firmware/version/)
+
+[Air780EGH 固件](https://docs.openluat.com/air780egh/luatos/firmware/version/)
+
+
+## 演示核心步骤
+
+1、搭建好硬件环境
+
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,通过luatools日志可以观察到以下信息:
+
+``` lua
+[2025-10-25 15:49:25.278][000000000.654] I/user.main project name is  logdemo version is  001.000.000
+[2025-10-25 15:49:26.074][000000001.663] 日志功能测试开始
+[2025-10-25 15:49:26.079][000000001.663] 默认日志级别: 1
+[2025-10-25 15:49:26.084][000000001.663] 测试日志级别: 1
+[2025-10-25 15:49:26.089][000000001.664] D/user.logdemo debug message
+[2025-10-25 15:49:26.094][000000001.664] I/user.logdemo info message
+[2025-10-25 15:49:26.097][000000001.664] W/user.logdemo warn message
+[2025-10-25 15:49:26.102][000000001.664] E/user.logdemo error message
+[2025-10-25 15:49:26.105][000000001.665] 测试日志级别: INFO
+[2025-10-25 15:49:26.108][000000001.665] I/user.logdemo info message
+[2025-10-25 15:49:26.111][000000001.665] W/user.logdemo warn message
+[2025-10-25 15:49:26.114][000000001.665] E/user.logdemo error message
+[2025-10-25 15:49:26.117][000000001.665] 测试日志级别: WARN
+[2025-10-25 15:49:26.122][000000001.666] W/user.logdemo warn message
+[2025-10-25 15:49:26.125][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.128][000000001.666] 测试日志级别: ERROR
+[2025-10-25 15:49:26.131][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.135][000000001.667] 测试日志级别: SILENT
+[2025-10-25 15:49:26.139][000000001.667] 恢复默认日志级别: 1
+[2025-10-25 15:49:26.142][000000001.667] I/user.logdemo 数值: 123 布尔值: true 表: table: 0C7F6DC8
+
+```

+ 59 - 0
module/Air780EPM/demo/log/log_test.lua

@@ -0,0 +1,59 @@
+--[[
+@module  log_test
+@summary log功能测试模块
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. log.debug 日志等级测试
+2. log.info 日志等级测试
+3. log.warn 日志等级测试
+4. log.error 日志等级测试
+
+]]
+
+local function test_log_output(level_name)
+    print(string.format("测试日志级别: %s", level_name))
+
+    log.debug(PROJECT, "debug message") 
+    log.info(PROJECT, "info message")
+    log.warn(PROJECT, "warn message")
+    log.error(PROJECT, "error message")
+end
+
+local function logtest_task()
+    -- 打印当前默认日志输出等级
+    local default_level = log.getLevel()
+    print("日志功能测试开始")
+    print(string.format("默认日志级别: %s", default_level))
+    
+    -- 实验1:使用默认日志输出等级测试
+    test_log_output(default_level)
+    
+    -- 实验2:设置为INFO级别,只输出info及以上级别的日志
+    log.setLevel("INFO")
+    test_log_output("INFO")
+    
+    -- 实验3:设置为WARN级别,只输出warn及以上级别的日志
+    log.setLevel("WARN")
+    test_log_output("WARN")
+    
+    -- 实验4:设置为ERROR级别,只输出error级别的日志
+    log.setLevel("ERROR")
+    test_log_output("ERROR")
+    
+    -- 实验5:设置为SILENT级别,完全关闭日志输出
+    log.setLevel("SILENT")
+    test_log_output("SILENT")
+    
+    -- 实验6:恢复默认日志输出等级,验证日志输出恢复
+    log.setLevel(default_level)
+    print("恢复默认日志输出等级: " .. log.getLevel())
+    
+    -- 测试不同参数类型的日志输出
+    log.info(PROJECT, "数值:", 123, "布尔值:", true, "表:", {name="test", value=456})
+end
+
+-- 启动测试任务
+sys.taskInit(logtest_task)

+ 51 - 49
module/Air780EPM/demo/log/main.lua

@@ -1,63 +1,65 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+日志功能测试,包括log.info、log.error、log.debug、log.warn等日志等级的测试。
+通过加载log_test模块来运行相关测试功能。
 
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "LOG"
-VERSION = "2.0.0"
+更多说明参考本目录下的readme.md文件
+]]
 
 --[[
-本demo演示 string字符串的基本操作
-1. lua的字符串是带长度, 这意味着, 它不依赖0x00作为结束字符串, 可以包含任意数据
-2. lua的字符串是不可变的, 就不能直接修改字符串的一个字符, 修改字符会返回一个新的字符串
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
 ]]
+PROJECT = "logdemo"
+VERSION = "001.000.000"
 
--- sys库是标配
-_G.sys = require("sys")
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
 
--- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
-if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
-    pm.power(pm.PWK_MODE, false)
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
 end
 
-local netLed = require("netLed")
---GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
-local LEDA= gpio.setup(27, 0, gpio.PULLUP)
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
 
-sys.taskInit(function ()
-    sys.wait(1000) -- 免得看不到日志
-    local tmp
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
 
-	--实验1:输出四个等级的日志,日志等级排序从低到高为 debug < info < warn < error
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	
-	--实验2:输出INFO及更高级别日志,即debug日志不输出
-	log.setLevel("INFO")
-	print(log.getLevel())
+-- 加载 log_test 功能模块
+require "log_test"
 
-	-- 这条debug级别的日志不会输出
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	--实验3:通过日志输出变量内容
-	local myInteger = 42
-    log.info("Integer", myInteger)
-end)
--- 这里演示4G模块上网后,会自动点亮网络灯,方便用户判断模块是否正常开机
-sys.taskInit(function()
-    while true do
-        sys.wait(6000)
-                if mobile.status() == 1 then
-                        gpio.set(27, 1)  
-                else
-                        gpio.set(27, 0) 
-                        mobile.reset()
-        end
-    end
-end)
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句
 sys.run()

+ 67 - 0
module/Air780EPM/demo/log/readme.md

@@ -0,0 +1,67 @@
+## 功能模块介绍
+
+1、main.lua:主程序入口,负责初始化系统环境;
+
+2、log_test.lua:日志功能测试模块,演示Air780EPM的日志输出功能;
+
+## 演示功能概述
+
+1、log_test:日志输出等级测试
+
+默认日志输出等级为 DEBUG,即输出 debug 及以上级别的日志;
+
+log.setLevel("INFO"): 输出 info 及以上级别的日志;
+
+log.setLevel("WARN"): 输出 warn 及以上级别的日志;
+
+log.setLevel("ERROR"): 输出 error 级别的日志;
+
+log.setLevel("SILENT"): 静默所有日志,即禁止日志有任何内容输出;
+
+## 演示硬件环境
+
+1、Air780EPM核心板一个:
+
+2、TYPE-C USB数据线一根,Air780EPM核心板和数据线的硬件接线方式为:
+
+- Air780EPM核心板通过TYPE-C USB口供电,核心板正面的 ON/OFF 拨动开关 拨到ON一端;
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air780EPM 固件](https://docs.openluat.com/air780epm/luatos/firmware/version/)
+
+## 演示核心步骤
+
+1、搭建好硬件环境
+
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,通过luatools日志可以观察到以下信息:
+
+``` lua
+[2025-10-25 15:49:25.278][000000000.654] I/user.main project name is  logdemo version is  001.000.000
+[2025-10-25 15:49:26.074][000000001.663] 日志功能测试开始
+[2025-10-25 15:49:26.079][000000001.663] 默认日志级别: 1
+[2025-10-25 15:49:26.084][000000001.663] 测试日志级别: 1
+[2025-10-25 15:49:26.089][000000001.664] D/user.logdemo debug message
+[2025-10-25 15:49:26.094][000000001.664] I/user.logdemo info message
+[2025-10-25 15:49:26.097][000000001.664] W/user.logdemo warn message
+[2025-10-25 15:49:26.102][000000001.664] E/user.logdemo error message
+[2025-10-25 15:49:26.105][000000001.665] 测试日志级别: INFO
+[2025-10-25 15:49:26.108][000000001.665] I/user.logdemo info message
+[2025-10-25 15:49:26.111][000000001.665] W/user.logdemo warn message
+[2025-10-25 15:49:26.114][000000001.665] E/user.logdemo error message
+[2025-10-25 15:49:26.117][000000001.665] 测试日志级别: WARN
+[2025-10-25 15:49:26.122][000000001.666] W/user.logdemo warn message
+[2025-10-25 15:49:26.125][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.128][000000001.666] 测试日志级别: ERROR
+[2025-10-25 15:49:26.131][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.135][000000001.667] 测试日志级别: SILENT
+[2025-10-25 15:49:26.139][000000001.667] 恢复默认日志级别: 1
+[2025-10-25 15:49:26.142][000000001.667] I/user.logdemo 数值: 123 布尔值: true 表: table: 0C7F6DC8
+
+```

+ 59 - 0
module/Air8000/demo/log/log_test.lua

@@ -0,0 +1,59 @@
+--[[
+@module  log_test
+@summary log功能测试模块
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. log.debug 日志等级测试
+2. log.info 日志等级测试
+3. log.warn 日志等级测试
+4. log.error 日志等级测试
+
+]]
+
+local function test_log_output(level_name)
+    print(string.format("测试日志级别: %s", level_name))
+
+    log.debug(PROJECT, "debug message") 
+    log.info(PROJECT, "info message")
+    log.warn(PROJECT, "warn message")
+    log.error(PROJECT, "error message")
+end
+
+local function logtest_task()
+    -- 打印当前默认日志输出等级
+    local default_level = log.getLevel()
+    print("日志功能测试开始")
+    print(string.format("默认日志级别: %s", default_level))
+    
+    -- 实验1:使用默认日志输出等级测试
+    test_log_output(default_level)
+    
+    -- 实验2:设置为INFO级别,只输出info及以上级别的日志
+    log.setLevel("INFO")
+    test_log_output("INFO")
+    
+    -- 实验3:设置为WARN级别,只输出warn及以上级别的日志
+    log.setLevel("WARN")
+    test_log_output("WARN")
+    
+    -- 实验4:设置为ERROR级别,只输出error级别的日志
+    log.setLevel("ERROR")
+    test_log_output("ERROR")
+    
+    -- 实验5:设置为SILENT级别,完全关闭日志输出
+    log.setLevel("SILENT")
+    test_log_output("SILENT")
+    
+    -- 实验6:恢复默认日志输出等级,验证日志输出恢复
+    log.setLevel(default_level)
+    print("恢复默认日志输出等级: " .. log.getLevel())
+    
+    -- 测试不同参数类型的日志输出
+    log.info(PROJECT, "数值:", 123, "布尔值:", true, "表:", {name="test", value=456})
+end
+
+-- 启动测试任务
+sys.taskInit(logtest_task)

+ 57 - 51
module/Air8000/demo/log/main.lua

@@ -1,59 +1,65 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+日志功能测试,包括log.info、log.error、log.debug、log.warn等日志等级的测试。
+通过加载log_test模块来运行相关测试功能。
 
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "LOG"
-VERSION = "2.0.0"
+更多说明参考本目录下的readme.md文件
+]]
 
 --[[
-本demo演示 string字符串的基本操作
-1. lua的字符串是带长度, 这意味着, 它不依赖0x00作为结束字符串, 可以包含任意数据
-2. lua的字符串是不可变的, 就不能直接修改字符串的一个字符, 修改字符会返回一个新的字符串
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
 ]]
+PROJECT = "logdemo"
+VERSION = "001.000.000"
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- 加载 log_test 功能模块
+require "log_test"
 
--- sys库是标配
-_G.sys = require("sys")
-
-
-local netLed = require("netLed")
---GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
-local LEDA= gpio.setup(27, 0, gpio.PULLUP)
-
-sys.taskInit(function ()
-    sys.wait(1000) -- 免得看不到日志
-    local tmp
-
-	--实验1:输出四个等级的日志,日志等级排序从低到高为 debug < info < warn < error
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	
-	--实验2:输出INFO及更高级别日志,即debug日志不输出
-	log.setLevel("INFO")
-	print(log.getLevel())
-
-	-- 这条debug级别的日志不会输出
-	log.debug(PROJECT, "debug message")
-	log.info(PROJECT, "info message")
-	log.warn(PROJECT, "warn message")
-	log.error(PROJECT, "error message")
-	
-	--实验3:通过日志输出变量内容
-	local myInteger = 42
-    log.info("Integer", myInteger)
-end)
--- 这里演示4G模块上网后,会自动点亮网络灯,方便用户判断模块是否正常开机
-sys.taskInit(function()
-    while true do
-        sys.wait(6000)
-                if mobile.status() == 1 then
-                        gpio.set(27, 1)  
-                else
-                        gpio.set(27, 0) 
-                        mobile.reset()
-        end
-    end
-end)
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句
 sys.run()

+ 71 - 0
module/Air8000/demo/log/readme.md

@@ -0,0 +1,71 @@
+## 功能模块介绍
+
+1、main.lua:主程序入口,负责初始化系统环境;
+
+2、log_test.lua:日志功能测试模块,演示Air8000的日志输出功能;
+
+## 演示功能概述
+
+1、log_test:日志输出等级测试
+
+默认日志输出等级为 DEBUG,即输出 debug 及以上级别的日志;
+
+log.setLevel("INFO"): 输出 info 及以上级别的日志;
+
+log.setLevel("WARN"): 输出 warn 及以上级别的日志;
+
+log.setLevel("ERROR"): 输出 error 级别的日志;
+
+log.setLevel("SILENT"): 静默所有日志,即禁止日志有任何内容输出;
+
+## 演示硬件环境
+
+1、Air8000核心板一个
+
+2、TYPE-C USB数据线一根
+
+3、Air8000核心板和数据线的硬件接线方式为
+
+- Air8000核心板通过TYPE-C USB口连接TYPE-C USB 数据线,数据线的另外一端连接电脑的USB口;
+
+- 核心板正面的 供电/充电 拨动开关 拨到供电一端;
+
+- 核心板背面的 USB ON/USB OFF 拨动开关 拨到USB ON一端;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air8000 V2018版本固件](https://docs.openluat.com/air8000/luatos/firmware/)
+
+## 演示核心步骤
+
+1、搭建好硬件环境
+
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,通过luatools日志可以观察到以下信息:
+
+``` lua
+[2025-10-25 15:49:25.278][000000000.654] I/user.main project name is  logdemo version is  001.000.000
+[2025-10-25 15:49:26.074][000000001.663] 日志功能测试开始
+[2025-10-25 15:49:26.079][000000001.663] 默认日志级别: 1
+[2025-10-25 15:49:26.084][000000001.663] 测试日志级别: 1
+[2025-10-25 15:49:26.089][000000001.664] D/user.logdemo debug message
+[2025-10-25 15:49:26.094][000000001.664] I/user.logdemo info message
+[2025-10-25 15:49:26.097][000000001.664] W/user.logdemo warn message
+[2025-10-25 15:49:26.102][000000001.664] E/user.logdemo error message
+[2025-10-25 15:49:26.105][000000001.665] 测试日志级别: INFO
+[2025-10-25 15:49:26.108][000000001.665] I/user.logdemo info message
+[2025-10-25 15:49:26.111][000000001.665] W/user.logdemo warn message
+[2025-10-25 15:49:26.114][000000001.665] E/user.logdemo error message
+[2025-10-25 15:49:26.117][000000001.665] 测试日志级别: WARN
+[2025-10-25 15:49:26.122][000000001.666] W/user.logdemo warn message
+[2025-10-25 15:49:26.125][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.128][000000001.666] 测试日志级别: ERROR
+[2025-10-25 15:49:26.131][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.135][000000001.667] 测试日志级别: SILENT
+[2025-10-25 15:49:26.139][000000001.667] 恢复默认日志级别: 1
+[2025-10-25 15:49:26.142][000000001.667] I/user.logdemo 数值: 123 布尔值: true 表: table: 0C7F6DC8
+
+```

+ 59 - 0
module/Air8101/demo/log/log_test.lua

@@ -0,0 +1,59 @@
+--[[
+@module  log_test
+@summary log功能测试模块
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+1. log.debug 日志等级测试
+2. log.info 日志等级测试
+3. log.warn 日志等级测试
+4. log.error 日志等级测试
+
+]]
+
+local function test_log_output(level_name)
+    print(string.format("测试日志级别: %s", level_name))
+
+    log.debug(PROJECT, "debug message") 
+    log.info(PROJECT, "info message")
+    log.warn(PROJECT, "warn message")
+    log.error(PROJECT, "error message")
+end
+
+local function logtest_task()
+    -- 打印当前默认日志输出等级
+    local default_level = log.getLevel()
+    print("日志功能测试开始")
+    print(string.format("默认日志级别: %s", default_level))
+    
+    -- 实验1:使用默认日志输出等级测试
+    test_log_output(default_level)
+    
+    -- 实验2:设置为INFO级别,只输出info及以上级别的日志
+    log.setLevel("INFO")
+    test_log_output("INFO")
+    
+    -- 实验3:设置为WARN级别,只输出warn及以上级别的日志
+    log.setLevel("WARN")
+    test_log_output("WARN")
+    
+    -- 实验4:设置为ERROR级别,只输出error级别的日志
+    log.setLevel("ERROR")
+    test_log_output("ERROR")
+    
+    -- 实验5:设置为SILENT级别,完全关闭日志输出
+    log.setLevel("SILENT")
+    test_log_output("SILENT")
+    
+    -- 实验6:恢复默认日志输出等级,验证日志输出恢复
+    log.setLevel(default_level)
+    print("恢复默认日志输出等级: " .. log.getLevel())
+    
+    -- 测试不同参数类型的日志输出
+    log.info(PROJECT, "数值:", 123, "布尔值:", true, "表:", {name="test", value=456})
+end
+
+-- 启动测试任务
+sys.taskInit(logtest_task)

+ 61 - 29
module/Air8101/demo/log/main.lua

@@ -1,34 +1,66 @@
--- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "LOG"
-VERSION = "2.0.0"
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.11.19
+@author  王世豪
+@usage
+本demo演示的核心功能为:
+日志功能测试,包括log.info、log.error、log.debug、log.warn等日志等级的测试。
+通过加载log_test模块来运行相关测试功能。
+
+更多说明参考本目录下的readme.md文件
+]]
 
 --[[
-本demo演示 log日志的基本操作
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
 ]]
+PROJECT = "logdemo"
+VERSION = "001.000.000"
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+-- 加载 log_test 功能模块
+require "log_test"
 
-sys.taskInit(function ()
-    sys.wait(1000) -- 延时一会儿,免得看不到日志
-    local tmp
-
-    --实验1:输出四个等级的日志
-	--日志等级从低到高为 debug(1) < info(2) < warn(3) < error(4)
-    log.debug(PROJECT, "debug message")
-    log.info(PROJECT, "info message")
-    log.warn(PROJECT, "warn message")
-    log.error(PROJECT, "error message")
-
-    --实验2:输出INFO级及更高级别日志
-    log.setLevel("INFO")
-    print("CurrentLogLev:",log.getLevel())
-    
-    log.debug(PROJECT, "debug message")  -- 这条debug级别的日志不会输出
-    log.info(PROJECT, "info message")	 -- 这条info级别的日志会输出
-    log.warn(PROJECT, "warn message")	 -- 这条warn级别的日志会输出
-    log.error(PROJECT, "error message")	 -- 这条error级别的日志会输出
-
-    --实验3:通过日志输出变量内容
-    local myInteger = 42
-	log.info("Integer", myInteger)       -- 输出myInteger变量值
-end)
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
 sys.run()
--- sys.run()之后后面不要加任何语句!!!!!
+-- sys.run()之后后面不要加任何语句!!!!!

+ 71 - 0
module/Air8101/demo/log/readme.md

@@ -0,0 +1,71 @@
+## 功能模块介绍
+
+1、main.lua:主程序入口,负责初始化系统环境;
+
+2、log_test.lua:日志功能测试模块,演示Air8101的日志输出功能;
+
+## 演示功能概述
+
+1、log_test:日志输出等级测试
+
+默认日志输出等级为 DEBUG,即输出 debug 及以上级别的日志;
+
+log.setLevel("INFO"): 输出 info 及以上级别的日志;
+
+log.setLevel("WARN"): 输出 warn 及以上级别的日志;
+
+log.setLevel("ERROR"): 输出 error 级别的日志;
+
+log.setLevel("SILENT"): 静默所有日志,即禁止日志有任何内容输出;
+
+## 演示硬件环境
+
+1、Air8101核心板一个:
+
+2、TYPE-C USB数据线一根
+
+3、Air8101核心板和数据线的硬件接线方式为
+
+- Air8101核心板通过TYPE-C USB口供电;(核心板背面的功耗测试开关拨到OFF一端)
+
+- 如果测试发现软件频繁重启,重启原因值为:poweron reason 0,可能是供电不足,此时再通过直流稳压电源对核心板的vbat管脚进行4V供电,或者VIN管脚进行5V供电;
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+2、[Air8101 V1006版本固件](https://docs.openluat.com/air8101/luatos/firmware/)
+
+## 演示核心步骤
+
+1、搭建好硬件环境
+
+2、Luatools烧录内核固件和demo脚本代码
+
+3、烧录成功后,自动开机运行,通过luatools日志可以观察到以下信息:
+
+``` lua
+[2025-10-25 15:49:25.278][000000000.654] I/user.main project name is  logdemo version is  001.000.000
+[2025-10-25 15:49:26.074][000000001.663] 日志功能测试开始
+[2025-10-25 15:49:26.079][000000001.663] 默认日志级别: 1
+[2025-10-25 15:49:26.084][000000001.663] 测试日志级别: 1
+[2025-10-25 15:49:26.089][000000001.664] D/user.logdemo debug message
+[2025-10-25 15:49:26.094][000000001.664] I/user.logdemo info message
+[2025-10-25 15:49:26.097][000000001.664] W/user.logdemo warn message
+[2025-10-25 15:49:26.102][000000001.664] E/user.logdemo error message
+[2025-10-25 15:49:26.105][000000001.665] 测试日志级别: INFO
+[2025-10-25 15:49:26.108][000000001.665] I/user.logdemo info message
+[2025-10-25 15:49:26.111][000000001.665] W/user.logdemo warn message
+[2025-10-25 15:49:26.114][000000001.665] E/user.logdemo error message
+[2025-10-25 15:49:26.117][000000001.665] 测试日志级别: WARN
+[2025-10-25 15:49:26.122][000000001.666] W/user.logdemo warn message
+[2025-10-25 15:49:26.125][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.128][000000001.666] 测试日志级别: ERROR
+[2025-10-25 15:49:26.131][000000001.666] E/user.logdemo error message
+[2025-10-25 15:49:26.135][000000001.667] 测试日志级别: SILENT
+[2025-10-25 15:49:26.139][000000001.667] 恢复默认日志级别: 1
+[2025-10-25 15:49:26.142][000000001.667] I/user.logdemo 数值: 123 布尔值: true 表: table: 0C7F6DC8
+
+```