首页 > 其他分享 >嵌入式开发-如何快速定位到系统卡死的位置

嵌入式开发-如何快速定位到系统卡死的位置

时间:2024-09-09 18:50:56浏览次数:11  
标签:定位 代码 系统 嵌入式 while 循环 卡死 监听

     “靠,死机了”,在周遭满是噼噼啪啪的键盘声中,一声突兀的嚎叫响起。然后便是一阵手忙脚乱的各种log添加、代码查看、问题复现。这场景想想都觉得小心脏慌慌的。那么有什么办法能让我们遇到这种情况能稍微优雅一点,不至于发出杀猪般的嚎叫呢?这就是接下来要介绍的一个小方法。

    实际上,在项目开发过程中,系统卡死在某个位置的情况分为两种,一种是系统访问到非法地址,一种是系统卡死在某个while循环中。

系统访问到非法地址:

系统访问到非法地址一般都会执行HardFault()硬件错误处理函数,芯片厂家都会提供相应的读取寄存器的方法,然后根据寄存器值就能知道系统在哪个位置访问到了非法地址。然而该位置不一定是导致死机的真正位置,针对该问题可查看文章嵌入式开发-死机位置在第三方库的问题原因定位

系统卡死在某个while循环中:

当系统出现内存地址非法访问时,系统通常会执行HardFault()函数以记录内存非法访问前相关的变量。那么当系统在while循环中卡死时,我们是否也可以记录系统卡死前的位置及相关变量信息呢?答案是肯定的。当系统在while循环中卡死时,系统的RAM、定时器、中断等部件仍然正常工作。因此,我们可以定义全局变量并在需要的地方将代码行号、变量记录到定义的全局变量中,以便在系统出现卡死时读取。所以,我们需要解决两个问题:一是在何处监听代码,二是在系统卡死时如何获取记录的信息。

在何处监听代码

在何处监听代码,主要是个颗粒度问题。理想情况下肯定是在所有while循环出现的地方添加,但是这明显会加重我们的开发负担。因此,我们可以考虑在每个模块的执行函数入口及出口处添加,具体实现方式如下:

DEBUG_CHK_LINE()实现方式如下:

在代码的监听处,我们主要记录文件名及行号。如果需要也可以记录需要监听的变量。

系统卡死时如何获取监听信息

鉴于系统持续记录代码执行位置及相关变量信息,我们的主要挑战在于判断系统是否陷入死循环。因此,我们可以通过设定一个定时器周期中断并累加时间,当累加时间超过预设阈值TIME_OUT时,将所记录信息打印出来。其接口实现方式如下:

为了实现时间的累加,DEBUG_CHK_LINE_TIMER_INT(TIME_OUT) 需要在定时器中断回调函数执行并在代码监听接口DEBUG_CHK_LINE()内实现累加时间的清除。

通过上述方式添加监听接口后,当系统在while循环中出现卡死现象时,系统将定期打印相关信息。我们可以通过这些信息迅速定位导致卡死的模块。若无法直接通过查看卡死函数func()来确定具体位置,可以在func()函数内部继续添加监听接口DEBUG_CHK_LINE()并复现问题。

然而,在某些情况下,系统可能会在while循环中卡死,但这并不是while循环本身代码的问题,而是由于外部模块发生了内存越界访问,从而篡改了while循环代码导致的。在这种情况下,可以结合文章嵌入式开发-死机位置在第三方库的问题原因定位的方法来定位问题。

期望本方法能帮助大家在遭遇系统卡死状况时,不必发出无助的哀嚎。

标签:定位,代码,系统,嵌入式,while,循环,卡死,监听
From: https://blog.csdn.net/u010467490/article/details/141964789

相关文章

  • 嵌入式笔面试小题
    嵌入式笔面试小题1、进程和线程有什么区别?2、循环控制条件关键字goto被经常使用,但是goto的使用场合为什么受到局限?3、字节对齐的理解,什么是字节对齐?4、堆与栈的区别?5、关键字const有什么含义?6、已知一个数组table,用一个宏定义,求出数据的元素个数?7、递归函数定义没有......
  • 嵌入式QT开发:构建高效智能的嵌入式系统
    摘要: 本文深入探讨了嵌入式QT相关的各个方面。从QT框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式QT的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式QT的界面设计与开发,涵盖了从基本控件的使用到......
  • 深入探索嵌入式 Linux
    摘要:本文深入探究嵌入式Linux。首先回顾其发展历程,从早期尝试到克服诸多困难逐渐成熟。接着阐述其体系结构,涵盖硬件、内核、文件系统和应用层。开发环境方面包括交叉编译工具链、调试工具和集成开发环境。在应用领域,广泛应用于消费电子、工业控制、汽车电子和智能家居等领域。......
  • 嵌入式学习路线+嵌入式校招建议 嵌入式学习面试规划
    随着物联网、人工智能以及5G等技术的迅猛发展,嵌入式系统的需求逐渐增多。作为毕业生,如何制定一个合理的学习路线,以确保在找工作、参加校招时有足够的竞争力,是非常重要的。我会为你提供一个更加详细、系统的学习路线建议,帮助你避免迷失方向。一、初级阶段——基础入门目标......
  • 51c嵌入式~电路~合集5
    一、电路的基础知识总结了电路基础知识点。......
  • 华为鸿蒙手机安装好谷歌商店,GMS服务,谷歌三件套,谷歌框架后,下载的一些应用无法正常定位,
    最近有有小伙伴问为什么他下载好一些定位的软件,能正常的进入,定位权限也是开启的,但是就是定不了位,,给我们小伙伴带来了烦恼,那我们怎么解决呢?我这里给大家讲解一下,避免大家以后遇见后不知道怎么去解决解决方法1.首先我们需要在我们的手机设置里面找到我们的应用和服务,进去后点......
  • 嵌入式Linux系统开发学习--Linux系统及其操作部分
    0.前言    由于毕业了工作原因,转行做嵌入式了,现在开始学习嵌入式Linux系统开发,后面也会学习单片机部分的知识,我也会陆续的将我的学习历程发送出来,迟迟不发文就是工作太忙了,现在进了家小企业,我负责的模块公司也没有人会,虽然是开源的,但是网上一堆牛鬼蛇神的资料,让我吃了......
  • aspose word指定位置插入图片,借助word模板文件中的书签来定位 及Java 获取网络图片
    asposeword指定位置插入图片,借助word模板文件中的书签来定位 及Java 获取网络图片链接:asposeword模板文件生成pdfhttps://www.cnblogs.com/oktokeep/p/16615900.html在Aspose.Words中,您可以使用DocumentBuilder类在指定位置插入图片。以下是一个简单的示例代码,展示如何实现......
  • IP地址定位技术助力悦选网
    近期,国内知名电商平台“悦选网”成功运用IP地址定位技术,实现了对用户的精准定位和个性化推荐。随着市场竞争的日益激烈,悦选网意识到传统的营销策略已难以满足消费者的多样化需求。为了提升用户满意度和忠诚度,悦选网决定引入IP地址定位技术,实现更加精准的营销策略。当用户访问悦选网......
  • 蓝桥杯嵌入式国三备赛经验分享
    1学习STM32入门视频向大家推荐一套宝藏级别的视频:【STM32入门教程-2023版细致讲解中文字幕】如果已经比过蓝桥杯单片机或学习过单片机相关课程的同学,你们可以尝试不需要STM32套件进行学习。如果没有学过单片机相关课程的同学,可以买套件边用边学。尽量把这套视频看完,无论......