目录
- 重启
- 简介
- 分析重启原因
- 常见问题
- 相关资料以及购买链接
简介
在使用luat二次开发时,经常会遇见死机,无限重启等问题。导致脚本程序无法正常进行,再次烧录困难等。下面就讲解一下如何发现到如何解决这个问题。
分析重启原因
分析重启原因首先要知道重启开机原因,才能进行下一步判断。在Luat脚本里添加一段打印重启开机原因脚本:
reason=rtos.poweron_reason()
print(“开机原因:”..reason)
开机原因表:
POWERON事件 | 代码 | 解释 |
rtos. POWERON_KEY | 0 | 按键开机 |
rtos. POWERON_CHARGER | 1 | 充电开机 |
rtos. POWERON_ALARM | 2 | 闹钟开机 |
rtos. POWERON_RESTART | 3 | 软件重启开机 |
rtos. POWERON_EXCEPTION | 6 | 异常开机 |
rtos. POWERON_HOST | 7 | HOST工具控制重启开机 |
rtos. POWERON_WATCHDOG | 8 | 其他原因 |
1.开机原因:0
所以,如果模块重启前有频繁的通信操作,且没有固定的语句报错(无规律性),重启后上报的poweron reason为0,此时应该重点排查供电问题。如果存在瞬间电压跌落,可能会导致模块出现异常。
2.开机原因:3,6, 8
当poweron reason为3时,通常有两种情况:代码主动执行rtos.restart()或者sys.restart()实现软重启;代码运行出错(语法错误,内存不足、AT执行超时等多种可能性),底层自动重启;
当poweron reason为6时,只有这一种情况:底层出错,请上报bug;
当poweron reason为8时,通常是这种情况:Lua代码跑飞,底层亦无响应时,由外部看门狗芯片重启模块。
为了调试方便,建议开发者首先在任意lua文件中加入如下代码:
require”sys”
require”log”
sys.timerLoopStart(function() log.info("RAM free size:", 1024 - collectgarbage("count"), "KB")
log.info("ROM free size:", rtos.get_fs_free_size(), "KB") end, 5000)
For luaScript:
require”sys”
sys.timer_loop_start(function() print("RAM free size:", 1024 - collectgarbage("count"), "KB")
print("ROM free size:", rtos.get_fs_free_size(), "KB") end, 5000)
加入如上代码后,模块在运行时,即可间隔5秒打印一次RAM、ROM使用情况。
代码报错:
序号错误提示 | 错误原因 | 解决方法 |
attempt to index %s | 变量/函数 索引错误 | 修改代码 |
attempt to call %s | 变量/函数 引用错误 | 修改代码 |
disp.init: error param width(%d) height(%d) | disp初始化时,设置了错误的宽、高 | 修改为正确数值 |
disp.init: pixel depth must be 16 | disp像素色深必须是16位 | 修改代码 |
i2c.write: data must be number,string,table | i2c数据必须是数值、字符串或table | 修改数据类型 |
i2c.read: size must < %d | i2c读取错误,数据长度超限 | |
bad argument #%d (%s) | audio错误的参数 | 修改传入的参数 |
calling " LUA_QS " on bad self (%s) | audio错误的调用 | |
name conflict for module " LUA_QS, libname | 命名冲突 | 修改名称 |
too many results to unpack | unpack方法传参错误 | |
attempt to use a closed file | 文件已关闭,无法调用 | 打开文件 |
file is already closed | 文件已关闭 | 打开文件 |
wrong number of arguments | 传参 参数 个数错误 | 检查传参内容 |
string slice too long | 字符串过长 | |
attempt to use an invalid ICONV_TYPENAME | Iconv不支持的类型 | |
BUG: Unable to fetch CJSON configuration | cjson配置错误 | |
JSON parser does not support UTF-16 or UTF-32JSON | 不支持utf-16或utf-32字符编码 | |
Memory allocation error in CJSON protected call | 无法为CJSON分配内存 | |
invalid pin | GPIO配置错误,不存在该pin | 检查代码和硬件设计手册 |
invalid PIO operation | GPIO非法操作 | |
uart.setup can’t be called on virtual UARTs | UART无法初始化 | 检查代码,uart.setup相关配置 |
invalid number | UART错误的端口号 | 检查代码,uart.setup相关配置 |
invalid format | Uart.setup错误的配置参数 | 检查代码,uart.setup相关配置 |
常见问题
- 烧录脚本后一直重启
1.可能是脚本BUG,仔细检查脚本逻辑,有无死循环等
2.开发板供电不稳等,仔细参考硬件设计:Air724UG电源参考设计
相关资料以及购买链接
相关开发板购买链接
Air724UG开发板Air724 开发板使用说明相关软件资料下载