杰理可視化SDK--系統死機異常調試

杰理可視化SDK--系統死機異常調試

  • 系統異常原因
  • 杰理SDK異常調試準備工作
  • 杰理SDK系統異常定位
    • 異常代碼示例1
    • 異常代碼示例2

在使用杰理可視化SDK進行軟件開發時,往往會遇到一些系統異常問題,系統異常是指芯片在運行代碼時,由于軟件或硬件狀態出錯,當錯誤狀態未在硬件或軟件程序設計覆蓋的容錯范圍,就會引起系統處于未知狀態的異常。異常的結果是觸發了“系統復位”或者進入“系統異常中斷函數”。本篇文章介紹了使用杰理SDK定位系統運行過程中出現死機異常的一些方法。

系統異常原因

常見的系統異常原因主要有以下原因:

  1. CPU內部觸發的異常
    程序跑飛:CPU運行到程序非指定地址軟件流程,該異常通常由一些沒有正確初始化的函數指針變量引起。
    除0異常:CPU在除法運算中除數為0,就會觸發除0異常。
    非對齊內存訪問:CPU運行WORD字節內存訪問指令時,尋址寄存器不是4對齊的值,或者運行HALF-WORD內存訪問指令時,尋址寄存器不是2對齊的值,就會觸發非對齊內存訪問異常。
    堆棧溢出:當CPU的堆棧超出所設定的限制范圍時,就會出現堆棧溢出異常,該異常通常與任務用到的堆棧大于配置的堆棧大小引起。
  2. 內存相關異常
    讀寫非法內存地址:當CPU讀寫到非法的內存地址,非法內存地址主要包括:空白地址,只讀地址、程序員使用MPU保護的內存地址。該異常主要由于buff野指針引起,或者動態申請內存在free buff后,還在訪問buff的數據。
  3. 外設觸發的異常
    看門狗超時:系統由于長時間沒有清看門狗導致的系統異常,該問題常見原因是CPU負載過高,長時間沒有進idle任務,或者在某個軟件流程死循環,導致系統沒有清看門狗。

杰理SDK異常調試準備工作

  1. 可視化配置工具配置打印異常信息
    在“板級配置”->“調試串口”選項中打開“打印異常信息”。
    開啟打印異常信息

  2. 生成lst文件
    .lst文件是由ELF (Executable and Linkable Format) 文件通過objdump工具反匯編得到的列表文件。通過objdump命令生成的.lst文件可以顯示源代碼對應的匯編指令,這在軟件調試和死機問題定位時非常有用。
    SDK默認不會生成.lst文件,需要手動修改download的腳本代碼自動調用objdump來生成lst文件,這里是修改SDK目錄下download.c文件(SDK/cpu/brxx/tools),修改如下圖,表示將使用sdk.elf文件生成sdk.lst文件。
    生成lst文件
    上面修改后每次編譯工程代碼,tools目錄下會生成一個sdk.lst文件。
    lst文件路徑
    lst文件它通常包含了由軟件生成的各種信息的列表, 是由objdump工具反匯編得到, 它包含了比.map文件更詳細的調試信息,如每條指令的地址等。 在出現問題時提供重要的調試線索。 例如通過查看棧幀結構和在.lst文件中查找特定寄存器的地址,開發者可以快速定位到問題所在。

杰理SDK系統異常定位

異常代碼示例1

如下程序中在其中的一個函數中插入了一段死循環。
異常代碼示例1
當程序運行到這個位置時,可以看到程序日志打印中刷屏打印timer_no_response最后死機。如下圖
死機打印1-1
具體來說timer_no_response是由于某個定時器沒有響應而導致。需要排查是否是程序中的某個函數運行占用了太大CPU資源沒有釋放導致定時器的處理沒有能正常運行響應導致,從而導致系統崩潰死機。
這里我們可以借助lst文件和死機打印時的backtrace,定位到造成異常死機的位置。
死機打印1-2
這里我們看RETS和RETI寄存器
RETI(Return from Interrupt):這是中斷返回指令的寄存器,它將堆棧中保存的程序計數器的地址取出并送回PC,使程序從主程序的中斷處繼續執行。需要注意的是RETI所在位置的指令未被執行。
RETS(Return from Subroutine):這是從子程序返回的指令,通常用在非中斷的子程序調用中。它的主要作用是將堆棧中的返回地址彈出到程序計數器(PC),以便程序可以繼續執行調用子程序之后的下一條指令。
根據上面RETI信息排查到代碼action_a2dp_play_next()函數中出現的問題,即定位到了異常代碼的位置。
定位異常位置1

異常代碼示例2

如下代碼中演示了空指針引用造成的系統異常。如下圖代碼中定義了一個指向函數的指針,并將其初始化為NULL。接下來,我們嘗試通過調用ptr()來執行該空函數指針,但由于ptr是空指針,因此調用了之后會導致程序崩潰并死機。
異常代碼示例2
從耳機運行日志log中發現當代碼運行到這段程序的時候發生了死機。
死機打印2-1
由前面的方法查看lst文件和RETS寄存器可以定位到出問題代碼發生在
action_enter_low_latency_mode()函數中。
定位異常位置2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83660.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83660.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83660.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖簡記。。

模仿&#xff1a; algorithm-journey/src/class059/Code01_CreateGraph.java at main algorithmzuo/algorithm-journey Code01_CreateGraph C語言&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXN 11 #define MAX…

Linux 常用命令與 Shell 簡介

文章目錄 **Linux 常用命令與 Shell 簡介****Shell 簡介****什么是 Shell&#xff1f;****Shell 的工作原理****常見 Shell 類型****命令行基礎****Tab 補全與通配符** **Linux 常用命令****1. 入門必備命令****1.1 尋求幫助 - man 命令****1.2 用戶間切換 - su 命令****1.3 特…

基于51單片機的超聲波智能避障小車仿真

目錄 具體實現功能 設計介紹 資料內容 全部內容 資料獲取 具體實現功能 &#xff08;1&#xff09;超聲波實時測量小車與障礙物間的距離&#xff0c;并用LCD1602顯示。 &#xff08;2&#xff09;當測得的距離超過50時&#xff0c;前進電機轉動&#xff08;模擬后輪&#…

AIGC工具平臺-GPT-SoVITS-v4-TTS音頻推理克隆

聲音克隆與語音合成的結合&#xff0c;是近年來生成式AI在多模態方向上的重要落地場景之一。隨著預訓練模型能力的增強&#xff0c;結合語音識別、音素映射與TTS合成的端到端系統成為初學者可以上手實踐的全流程方案。 圍繞 GPT-SoVITS-v4-TTS 模塊&#xff0c;介紹了其在整合…

Android7 Input(十)View 處理Input事件pipeline

概述: 本文主要描述View對InputEvent事件pipeline處理過程。 本文涉及的源碼路徑 frameworks/base/core/java/android/view/ViewRootImpl.java InputEvent事件處理 View處理input事件是調用doProcessInputEvents方法&#xff0c;如下所示: void doProcessInputEvents() {//…

Neo4j 完全指南:從入門到精通

第1章&#xff1a;Neo4j簡介與圖數據庫基礎 1.1 圖數據庫概述 傳統關系型數據庫與圖數據庫的對比圖數據庫的核心優勢圖數據庫的應用場景 1.2 Neo4j的發展歷史 Neo4j的起源與演進Neo4j的版本迭代Neo4j在圖數據庫領域的地位 1.3 圖數據庫的基本概念 節點(Node)與關系(Relat…

網心云 OEC/OECT 筆記(1) 拆機刷入Armbian固件

目錄 網心云 OEC/OECT 筆記(1) 拆機刷入Armbian固件網心云 OEC/OECT 筆記(2) 運行RKNN程序 外觀 內部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的網絡盒子, 沒有HDMI輸入輸出. 硬件上 OEC 和 OECT…

攝像機ISP處理流程

1.Bayer&#xff1a;生成raw圖&#xff0c;添加色彩數據&#xff08;RGB&#xff09;&#xff0c;一般會將G的占比設置為R和B的和&#xff0c;實例&#xff1a; 2.黑電平矯正&#xff1a;減去暗電流造成的誤差&#xff1b; 3.鏡頭矯正&#xff1a;對四周的亮度進行矯正&#x…

【后端架構師的發展路線】

后端架構師的發展路線是從基礎開發到技術領導的系統性進階過程&#xff0c;需融合技術深度、架構思維和業務洞察力。以下是基于行業實踐的職業發展路徑和關鍵能力模型&#xff1a; 一、職業發展階梯? 初級工程師&#xff08;1-3年&#xff09;? 核心能力?&#xff1a;掌…

Unity VR/MR開發-VR開發與傳統3D開發的差異

視頻講解鏈接&#xff1a;【XR馬斯維】VR/MR開發與傳統3D開發的差異【UnityVR/MR開發教程--入門】_嗶哩嗶哩_bilibili

RabbitMQ如何保證消息可靠性

RabbitMQ是一個流行的開源消息代理&#xff0c;它提供了可靠的消息傳遞機制&#xff0c;廣泛應用于分布式系統和微服務架構中。在現代應用中&#xff0c;確保消息的可靠性至關重要&#xff0c;以防止消息丟失和重復處理。本文將詳細探討RabbitMQ如何通過多種機制保證消息的可靠…

批量圖片管理軟件介紹

軟件介紹 本文介紹一款功能全面的圖片處理軟件 - FastStone Image Viewer。 軟件功能概述 FastStone Image Viewer不僅支持圖片查看&#xff0c;還具備編輯、批量重命名和批量轉換等多種實用功能。 用戶授權說明 該軟件對個人用戶完全免費&#xff0c;企業用戶只需輸入用戶…

Playwright 測試框架 - Java

??【Playwright + Java 實戰教程】從零到一掌握自動化測試利器! ?? 本文專為 Java 開發者量身打造,通過詳盡示例帶你快速掌握 Playwright 自動化測試。涵蓋基礎操作、表單交互、測試框架集成、高階功能及常見實戰技巧,適用于企業 UI 測試與 CI/CD 場景。 ??? 一、環境…

nvidia系列教程-Usb otg模式修改為host模式

目錄 前言 一、了解 USB OTG 模式與 Host 模式 二、host模式切換 總結 前言 在 NVIDIA 設備的使用過程中,有時我們需要將 USB OTG(On-The-Go)模式切換為 Host 模式,以滿足連接外部設備(如 U 盤、鼠標、鍵盤等)的需求。本文將詳細介紹如何在 NVIDIA 設備上進行這一模式…

二叉樹-104.二叉樹的最大深度-力扣(LeetCode)

一、題目解析 這里需要注意根節點的深度是1&#xff0c;也就是說計算深度的是從1開始計算的 二、算法原理 解法1&#xff1a;廣度搜索&#xff0c;使用隊列 解法2&#xff1a;深度搜索&#xff0c;使用遞歸 當計算出左子樹的深度l&#xff0c;與右子樹的深度r時&#xff0c;…

Calendar類日期設置進位問題

背景 報表需求&#xff0c;需要傳遞每組數據中最小的日期&#xff0c;后臺根據傳遞的最小日期&#xff0c;向前取參數傳遞的月份的上個月為結束時間的近五個月數據 例&#xff1a;參數傳:2025/02&#xff0c;則需返回2025/01, 2024/12, 2024/11, 2024/10, 2024/09這五個年月數據…

編程筆記---問題小計

編程筆記 qml ProgressBar 為什么valuemodel.progress / 100 在QML中&#xff0c;ProgressBar的value屬性用于表示進度條的當前進度值&#xff0c;其范圍通常為0到1&#xff08;或0%到100%&#xff09;。當使用model.progress / 100來設置value時&#xff0c;這樣做的原因是為…

【STL】函數對象+常用算法

文章目錄 STL- 函數對象函數對象函數對象使用 謂詞一元謂詞二元謂詞內建函數對象算術仿函數關系仿函數 STL- 常用算法常用遍歷算法for_eachtransform 常用查找算法findfind_ifadjacent_findbinary_searchcountcount_if 常用排序算法sortrandom_shufflemergereverse 常用拷貝和替…

[JVM] JVM內存調優

&#x1f338;個人主頁:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;?熱門專欄: &#x1f9ca; Java基本語法(97平均質量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection與…

Spring Boot 從Socket 到Netty網絡編程(下):Netty基本開發與改進【心跳、粘包與拆包、閑置連接】

上一篇&#xff1a;《Spring Boot 從Socket 到Netty網絡編程&#xff08;上&#xff09;&#xff1a;SOCKET 基本開發&#xff08;BIO&#xff09;與改進(NIO)》 前言 前文中我們簡單介紹了基于Socket的BIO&#xff08;阻塞式&#xff09;與NIO&#xff08;非阻塞式&#xff0…