Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析
简介
本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201
关联文档和使用工具:
从Ramdump里分析内存泄漏问题
无法抓底层log的情况下如何导出死机dump
Luatools下载调试工具
EPAT抓取底层日志
Flashtools_v4.1.9下载
luatools和EPAT这2个工具,具体使用方法要了解,本文不做深入讲解,EPAT抓取底层日志文档内有详细使用说明
luatools用于捕获从USB口的用户log,即luat_debug_print输出的log,仅用于csdk和luatos。AT版本没有用户log和用户串口通道,需要使用EPAT工具抓取。
EPAT用于捕获USB口,UART0(DBG_UART串口) 的底层log,在luatools没有开启的时候,EPAT同样捕获用户log的大部分内容,这个时候用户log会从底层log输出,标识为luatos,等级为error,所以不要把用户log当做error!
luatools捕获用户log时,自动识别GB2312还是UTF8编码,也能正确打印64bit数据和浮点数据
EPAT只能识别GB2312编码,不能正确打印64bit和浮点数据,在用UART0捕获数据时会丢失部分log,尤其是优先级低的,所以用户log的等级是error,优先级高
双方都是USB口对接的情况下,USB虚拟串口没有波特率限制,任意选择,实际传输速率都是一样的
为啥要区分用户log通道和底层log通道,因为移芯不开放底层log解析方法
csdk固件默认死机后存储死机信息到flash后重启,luatos固件死机后会存储死机信息到flash,然后等EPAT或者luatools抓取死机信息,等待大约40秒左右会重启
出现死机问题分析
A 怎么抓LOG
A1 认识USB虚拟串口
由于电脑识别出来串口名字都是一样的,因此需要从串口属性上来区分对应功能,具体看下面截图红框
A1.1 用户log通道

A1.2 底层log通道

A1.3 用户串口通道

A2 抓log
如果使用EPAT工具抓取日志,说明请看 EPAT抓取底层日志文档
A2.1 USB可用
建议方案1,只用luatools勾选USB打印模式即可,没有配置上的要求,luatools会自动识别log通道,需底层log的,工具配置–》log–》勾选ap log,luatools会自动识别log通道,底层log保存在log/4gdiag。luatools版本必须在2.2.1及以上
建议方案2,直接用EPAT,按照EPAT手册操作即可,如果luatools开着,工具配置–》log–》不要勾选ap log
A2.2 USB不可用
只能用EPAT通过DBG_UART抓LOG了,需要6M波特率抓取(USB转TTL工具也要支持6M波特率),如果是AT版本还需要通过发送以下指令配置
AT+ECPCFG=logCtrl,2 // 输出全部日志
AT+ECPCFG=logPortSel,1 // 只从DBG_UART串口输出日志
AT+ECPCFG=logBaudrate,6000000 // 设置波特率为6M
B 遇到死机怎么办
设置死机不重启方法
- AT固件:发送 AT+ECPCFG=“faultAction”,0 或者 AT*EXASSERT=1 指令开启死机不重启。
- LuatOS开发:调用 mcu.hardfault(0) 接口开启死机不重启。
- CSDK开发:在task中执行 luat_debug_set_fault_mode(LUAT_DEBUG_FAULT_HANG); 开启死机不重启。
B1 EPAT抓底层log,固件设置成死机不重启
EPAT会自动抓,并且自动弹出ramdump处理界面,按照手册操作即可。
B2 luatools抓底层log,固件设置成死机不重启
luatools也会自动抓ramdump,但是只能保存成文件,仍然需要用EPAT来手动进入处理ramdump界面,后续处理见B1
B3 固件设置成死机重启,或者没有工具抓底层log
帮助文档:无法抓底层log的情况下如何导出死机dump
C 死机重启原因常见情况分析
死机需要底层log和ramdump处理结果综合判断,luatos固件还要看用户log,这里讨论如何定位出错代码位置或者出错原因
C1 luavm抛出的异常
这个看用户log就行,如果开启了errdump,还能在iot平台上看到
C2 断言死机
看底层log就可以,搜索EcAssert字样,可以看到断言的位置
如果没有底层log,ramdump里需要看list source的代码上下是不是调用了ec_assert_regs,然后在stackframe with local里看看调用顺序,大概率能看到断言的位置。
断言死机如果是malloc失败,那么就是ram不足了。
C3 内存不足
这是最常见的死机原因,而且9成9可以判断是内存泄露,剩下也有可能malloc时的参数不对,申请了不可能申请到的空间大小。内存不足直接表现,C2中已有部分描述,如果有底层log,还可以从死机时打印的信息来判断

这里表示动态分配ram时,最大的block只有712字节了,这是非常典型的内存不足引起的死机,正常来说,至少要有个70KB左右的空间来满足LTE协议栈的需求
如果ramdump信息完整,则可以从ramdump里找到查找方向从Ramdump里分析内存泄露问题
C4 看门狗死机
在底层log和ramdump里都能看到,

ramdump里能看到最后停在NMI Handler里。
看门狗死机,要么死循环,要么操作时间太长,消除死循环,或者主动喂一下狗。压力测试和RSA运算时特别注意一下。
C5 疑难杂症
真正遇到hardfault时,需要先从底层日志里看死机的直接原因,也就是arm内核遇到的致命错误,当然多种多样,常见的地址错误(常见data access)有数据存取时的总线错误(常见precise data access,imprecise data access等等),指令错误(常见switch to an invalid state (e.g., ARM))等等。
以下个人经验:
先要排除一下栈溢出的可能,一旦栈溢出,什么奇怪的现象都有可能发生,运气好的,触发断言,运气不好的,就什么错误都可能发生,任务链表都可能被破坏,导致ramdump里的信息都会缺失。
如果ramdump信息完整,则可以从ramdump大致分析出有没有栈溢出现象从Ramdump里看栈溢出
如果ramdump的信息看起来完整,stackframe with local里调用顺序也比较合理,那么就能定位发生问题的函数和语句,后续就看代码调试吧,这是比较理想的情况。
地址错误的,大概率是读写了一个不可读写的地址,但是注意,有时候非ram和flash地址,直接读取并不一定会出错。
总线错误,大概率是数据对齐的问题,比如uint32_t *指针,去读取一个uint8_t *指针指向的内容,一旦uint8_t *指针存放的地址不是32位对齐的,编译器又没有对应优化处理,死机是很正常的
指令错误,这种常见的函数指针用出问题,导致函数退出时,PC指针已经不能指向正确的代码指令,从而执行了非arm的指令
如果ramdump的信息都不完整,底层log也丢完,或者压根没法抓,建议通过删减代码,加打印语句等方法来定位出错的语句,多次尝试缩小范围,直到成功,有经验,对源码了解的,能加快这一进度。
误,这种常见的函数指针用出问题,导致函数退出时,PC指针已经不能指向正确的代码指令,从而执行了非arm的指令
如果ramdump的信息都不完整,底层log也丢完,或者压根没法抓,建议通过删减代码,加打印语句等方法来定位出错的语句,多次尝试缩小范围,直到成功,有经验,对源码了解的,能加快这一进度。
咨询电话合宙市场部葛理想13723245337
企业微信

相关文章:
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析
Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析 简介 本文档适用于合宙Air780E、Air780EP、Air780EQ、Air201 关联文档和使用工具: 从Ramdump里分析内存泄漏问题 无法抓底层log的情况下如何导出死机dump Luatools下载调试工具 EPAT抓取底层日志 F…...
前端经验:使用sheetjs导出CSV文本为excel
应用场景 很多web表格组件没有提供直接的导出excel功能,但提供了导出CSV的功能。 如果能想办法拿到CSV的内容,就可以利用sheetjs生成excel并导出。 实施步骤 1.拿到CSV的内容字符 每种表格组件都有各自的CSV生成方法,不管用什么方法&…...
【nnUNetv2进阶】十五、nnUNetv2 魔改网络-小试牛刀-引入ECA
nnunet使用及改进教程。 【nnUNetv2实践】一、nnUNetv2安装 【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程 【nnUNetv2进阶】三、nnUNetv2 自定义网络-发paper必会-CSDN博客 其他网络改进参考: 【nnUNetv2进阶】四、nnUNetv2 魔改网络-小试牛刀-加入…...
centos(或openEuler系统)安装kafka集群
安装192.168.9.60、192.168.9.61、192.168.9.62这3台kafka集群(kraft模式,不用zookeeper) 不带密码的 1.每台机器安装kafka: cd /home/kafka wget https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz 不通就换这…...
HarmonyOS根据官网写案列~ArkTs从简单地页面开始
Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…...
GraphRAG+ollama+LM Studio+chainlit
这里我们进一步尝试将embedding模型也换为本地的,同时熟悉一下流程和学一些新的东西 1.环境还是用之前的,这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃,因为无法搜索,无法下载 解决办法如下lm studio 0.2.24国内下载…...
【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8
前言 第 5 章对应的内容选择题和案例分析都会进行考查,这一章节属于技术的内容,学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…...
6. dolphinscheduler-3.0.0伪集群部署
环境说明: 主机名:cmc01为例 操作系统:centos7 安装部署软件版本部署方式centos7zookeeperzookeeper-3.4.10伪分布式hadoophadoop-3.1.3伪分布式hivehive-3.1.3-bin伪分布式clickhouse21.11.10.1-2单节点多实例dolphinscheduler3.0.0单节…...
防火墙内容安全综合实验
一、实验拓扑 二、实验要求 1,假设内网用户需要通过外网的web服务器和pop3邮件服务器下载文件和邮件,内网的FTP服务器也需要接受外网用户上传的文件。针对该场景进行防病毒的防护。 2,我们需要针对办公区用户进行上网行为管理,要…...
常见的数据分析用例 —— 信用卡交易欺诈检测
文章目录 引言数据集分析1. 读入数据并快速浏览2.计算欺诈交易占数据集中交易总数的百分比3. 类别不平衡对模型的影响3.1 总体思路(1)数据的划分(2)训练模型(3)测试模型(4)解决不平衡…...
IP地址:由电脑还是网线决定?
IP地址:由电脑还是网线决定? 在互联网时代,IP地址是我们进行网络通信的基础。然而,对于IP地址究竟是由电脑决定还是由网线决定的问题,不少人可能存在疑惑。本文将从IP地址的定义、分配方式以及影响因素等方面进行探讨…...
如何定位及优化SQL语句的性能
在数据库管理和优化中,定位并解决SQL语句的性能问题是至关重要的。MySQL通过EXPLAIN命令提供了强大的工具来查看SQL语句的执行计划,这是定位性能瓶颈和优化SQL语句的首要步骤。以下是如何利用执行计划来定位及优化SQL语句性能问题的详细指南。 一、使用…...
SentenceTransformers (SBERT)
文章目录 一、关于 SBERT特点预训练模型应用实例 二、安装开发设置 三、入门使用四、训练五、Cross Encoder 一、关于 SBERT 官方文档:https://www.sbert.net/github : https://github.com/UKPLab/sentence-transformerspaper : Sentence-BERT: Sentence Embedding…...
第三届智能机械与人机交互技术学术会议(IHCIT 2024)
【北航主办丨本届SPIE独立出版丨已确认ISSN号】 第三届智能机械与人机交互技术学术会议(IHCIT 2024) 2024 3rd International Conference on Intelligent Mechanical and Human-Computer Interaction Technology 2024年7月27日----中国杭州࿰…...
图的访问(C++)
题目描述 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点。 输入格式 第 1 行 2 个整数 N,M,表示点数和边数。 接下来 M 行,每行 2 个整数 Ui,Vi,表…...
LeetCode做题记录(第二天)169. 多数元素
题目:169. 多数元素 标签:数组 哈希表 分治 计数 排序 题目信息: 思路一: 在题目中出现了计数,那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数,当出现次数大于n/…...
Adobe XD中文设置指南:专业设计师的现场解答
Adobe XD是世界领先的在线合作UI设计工具。它摆脱了Sketch、Figma等传统设计软件对设备的依赖,使设计师可以随时随地使用任何设备打开网页浏览器,轻松实现跨平台、跨时空的设计合作。然后,为了提高国内设计师的使用体验,Adobe XD如…...
CentOS 7 安装Jenkins2.346.1(war方式安装)
既然想要安装Jenkins,肯定是先要从官网解读所需环境配置信息,如需了解更多自行查阅 https://www.jenkins.io/doc/book/installing/linux/ JDK17,Maven3.9 安装 先从官网分别下载JDK17与Maven3.9 下载好之后上传至服务器、并解压:…...
使用Java -jar运行就jar包时报异常:org.yaml.snakeyaml.error.YAMLException异常
Java运行就 .jar包时出现的 YAMLException 异常 我在本地环境测试时,使用 java -jar 命令运行 Java 可执行 .jar 包时,遇到了 org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1 异常;这…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
