Air780E/Air780EP/Air780EQ/Air201模块遇到死机问题如何分析

news2024/11/13 9:30:00

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

企业微信

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

品牌媒体邀约的流程及注意事项

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 品牌媒体邀约是一个复杂但重要的公关策略,能够帮助企业提高曝光率、树立品牌形象并传递信息。以下是品牌媒体邀约的流程及注意事项: 一、品牌媒体邀约流程 明确目…

Xcode如何创建多个工程

在Xcode中创建如何创建下图所示的工程呢?即在工程下有四个子项目,且四个子项目不同时运行,每次只运行一个。使用Visual Studio C的话不过是基操而已! 1.首先创建工程,即图中的“Project” 1.1 打开Xcode&#xff0c…

像 MvvmLight 一样使用 CommunityToolkit.Mvvm 工具包

文章目录 简介一、安装工具包二、实现步骤1.按照MvvmLight 的结构创建对应文件夹和文件2.编辑 ViewModelLocator3.引用全局资源二、使用详情1.属性2.命令3. 消息通知4. 完整程序代码展示运行结果简介 CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit…

使用Python爬虫下载视频源码

一、引言(●ˇ∀ˇ●) 在当今互联网时代,视频内容已成为人们获取信息和娱乐的重要方式。有时,我们可能希望将这些视频下载到本地,以便在没有网络的情况下观看。本文将介绍如何使用Python编写一个简单的爬虫。 二、环境准备😘 在…

ThinkPad改安装Windows7系统的操作步骤

ThinkPad:改安装Windows7系统的操作步骤 一、BIOS设置 1、先重新启动计算机,并按下笔记本键盘上“F1”键进入笔记本的BIOS设置界面。 2、进入BIOS设置界面后,按下键盘上“→”键将菜单移动至“Restart“项目,按下键盘上“↓”按键…

pdf转换器哪个好?PDF转word工具分享

pdf转换器哪个好?选择PDF转换器可以极大地提升我们的工作效率与灵活性。它不仅能够轻松实现PDF文件与其他格式(如Word、Excel、图片等)之间的互转,满足多样化的文件处理需求;还能在保持文件内容完整性的同时&#xff0…

“信息科技风险管理”和“IT审计智能辅助”两个大模块的部分功能详细介绍:

数字风险赋能中心简介 数字风险赋能中心简介 ,时长05:13 大家好!我是AI主播安欣,我给大家介绍一下数字风险赋能中心。 大家都知道当前我国政企机构的数字化转型已经进入深水区,数字化转型在给我们带来大量创新红利的同时&#xf…

ForCloud全栈安全体验,一站式云安全托管试用 开启全能高效攻防

对于正处于业务快速发展阶段的企业,特别是大型央国企而言,日常的安全部署和运营管理往往横跨多家子公司,所面临的挑战不言而喻。尤其是在面对当前常态化的大型攻防演练任务时,难度更是呈“几何级数”上升: 合规难 众…

C++容器之vector

C vector容器 vector是可变数组。 容纳元素个数可以在运行期间变化。 std::vector 是 C 标准库中的动态数组容器,它提供了可变大小的数组功能,具有灵活性和多种强大的功能。 特点 动态大小: std::vector 可以根据需要动态增长或缩小,可以在…

使用VuePress-Reco快速搭建博客(保姆级)

简介:VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题,可以自由搭建自己的风格,比较方便简洁。 链接:vuepress-reco 准备环境: Node.Js >20.5.0,Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

数据库系统概论:数据库系统的锁机制

引言 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,数据作为一种共享资源,其并发访问的一致性和有效性是数据库必须解决的问题。锁机制通过对数据库中的数据对象(如表、行等)进行加锁,以确保在同…

数据结构-冒泡排序

1 概念 冒泡排序属于一种常见的交换排序,根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。具体操作是按顺序(从前往后或从后往前)两两对比元素直至本次排序结束,每次排序确认一个固定值(末位或首…

windows USB 设备驱动开发-开发Type C接口的驱动程序(二)

编写 USB Type C 连接器驱动程序 在以下情况下,需要编写 USB Type-C 连接器驱动程序: 如果 USB Type-C 硬件能够处理电源输送 (PD) 状态机。 否则,请考虑编写 USB Type C 端口控制器驱动程序; 如果硬件没有嵌入式控制器。 否则&…

微信小程序 button样式设置为图片的方法

微信小程序 button样式设置为图片的方法 background-image background-size与background-repeat与border:none;是button必须的 <view style" position: relative;"><button class"customer-service-btn" style"background-image: url(./st…

[数据集][目标检测]拐杖检测数据集VOC+YOLO格式638张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;638 标注数量(xml文件个数)&#xff1a;638 标注数量(txt文件个数)&#xff1a;638 标注类别…

四个节点即可实现的ComfyUI批量抠图工作流

原文链接&#xff1a;ComfyUI面部修复完全指南 (chinaz.com) 下图就是批量抠图的工作流 虽然工作流很简单&#xff0c;但是我们前提还是需要安装好我们的节点 首先安装我们的抠图节点 安装 BiRefNet 所需依赖&#xff1a;timm&#xff0c;如已安装无需运行 requirements.txt…

【论文阅读】Mamba: Linear-Time Sequence Modeling with Selective State Spaces

Mamba: Linear-Time Sequence Modeling with Selective State Spaces 论文&#xff1a;[2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces 作者&#xff1a;Albert Gu 和 Tri Dao&#xff0c;分别来自卡内基梅隆大学机器学习系和普林斯顿大学计…

ros笔记02--从零体验ros2中的服务通信方式

ros笔记02--从零体验ros2中的服务通信方式 介绍创建步骤注意事项说明 介绍 在ROS 2中&#xff0c;服务指的是远程过程调用&#xff0c;client调用server&#xff0c;server节点收到数据后计算出结果并返回给client. 服务通常期望能快速返回&#xff0c;因此不应当用于处理长时…

spark 动态资源分配dynamicAllocation

动态资源分配&#xff0c;主要是spark在运行中可以相对合理的分配资源。 初始申请的资源远超实际需要&#xff0c;减少executor初始申请的资源比实际需要少很多&#xff0c;增多executorSpark运行多个job&#xff0c;这些job所需资源有的多有的少&#xff0c;动态调整executor…

[数据集][目标检测]拐杖检测数据集VOC+YOLO格式2778张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2778 标注数量(xml文件个数)&#xff1a;2778 标注数量(txt文件个数)&#xff1a;2778 标注…