0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式软件问题的分析与解决

麦辣鸡腿堡 来源:嵌入式系统 作者:嵌入式系统 2023-12-07 15:56 次阅读

软件问题的分析与解决

嵌入式软件由于调试手段的限制、部署场景的多样化、软硬件问题混合在一起、外部环境因素的影响等因素,导致软件经常会遇到一些非常难以解决的问题。

3.1 解题思想

熟悉软件的业务流程:从业务的角度发现问题、复现问题并解决问题。

熟悉软件的总体架构:软件架构是解决难题问题的基本框架,基于软件架构解决问题不会陷入到局部细节,导致修复一个问题的同时产生新的问题,不会犯原则性、方向性错误。

熟悉软件代码的实现:熟悉代码的细节,能够更好、更快的在蛛丝马迹中找到证据和突破点,甚至在问题还没有收敛前,提供一种收敛的方向,引领问题的解决,对代码的熟悉程度直接关系到解决问题的速度。

3.2 调试手段和信息不足相关问题

3.2.1 现场偶发性、难复现性引发的问题

一些偶发性现象级问题,甚至导致系统偶发性的重启,无法复现,设备重启之后,故障消失后,再也很难复现。

1、分析日志文件

从log中寻找异常提示,是应对不可重复性、偶发性故障最基本的手段。在系统某处发生异常时,一定会在log中留下蛛丝马迹,可以请客户协助提供串口日志,在log文件中查找问题。或者设备自己内部记录log,但嵌入式设备由于存储空间的限制,可能先前过于久远的信息,就会被新的信息被覆盖,针对这种情况,就需要定期清除无效日志。有些异常会导致系统重启,而重启之后,就会导致异常信息被正常重启的信息覆盖,这就需要系统能够支持log的备份。不管怎么样,log为定位现场问题提供了最基本的、最主要的信息来源。一个完善的log机制,对于定位现场问题非常有帮助。如果不满足,可能首要任务是先完善日志功能。

2、回退软件版本,紧急消除现场问题

有些现场问题,虽然偶发事件,但发生后影响严重,客户无法接受。针对这种情况,在解决问题之前,可以先把软件降级,降级到相对稳定,没有严重故障的版本。

3、比较相邻版本之间的代码改动

如果不容易复现的故障,确认在升级了某个软件版本之后才出现的,而其他现场条件都没有变化,且分析log也无法发现异常点。此时,一种高效的解决此问题的方法,就是比较两个版本之间的代码的改动。

代码改动比较少,分析代码比较容易;如果代码改动比较多,就需要根据用户描述的现象,结合前后代码的改动模块,初步分析最可能是哪个模块引起的,这种往往需要对系统架构较深刻的理解。在众多修改模块中,分析最有可能关联的代码模块的改动,然后逐一排查 。分析代码的改动与出现的现象之间可能的关联关系,对开发人员个人的技术素养和方法论有较高的要求 。比较相邻版本之间的代码改动,针对某些棘手的现场问题,有时候确实是一个非常有效的手段。

4、问题复现

虽然常规来说现场很难复现,但可以人为的修改软件、构建或增加模拟数据,人为创造或触发条件,增加故障复现的几率。在设计触发条件时,需要围绕用户描述的现场故障现象来设计触发条件,观察是否能否复现,且表现一致。

5、分析代码

根据用户描述的现象,硬分析代码,是一种通用的方法,放之四海皆准的方法,熟悉自身代码的逻辑关系是基本功,但解决问题的效率就比较难把握了。

6、增加 log 更新版本继续测

如果常规的log无法展现故障的异常,就需要在猜测有可能的部分增加日志,在现场复测。但这种日志添加的位置是否合理,决定了问题再次出现时是否能定位问题的准确性。这种方法在工程实践中,实施难度大,需要客户多次配合。

3.2.2 现象与真正的原因不在一起的问题

大多时候解决软件故障,是可以做到头痛医头,脚痛医脚。有些时候,头痛的原因并不在“头”,而在“脚”。这就需要知道“头痛” 与 “脚” 的某种关联关系。

解决这样的问题,对技术人员的综合技能的要求非常高,因为这个问题,不再是局部问题,而是发散到调查该问题的技术人员不熟悉的其他的软件组件领域。即使对于熟悉整个系统的人而言,也是一个难点,因为问题的现象与根源之间的路径是发散的,没有一个确切的路径。

首先,必须以故障的表面现象作为锚点,作为出发点。为后续进一步的调查立一个基点。根据现象找到出问题的代码,根据代码和log分析代码的表面原因。如果确实是本处代码的问题,直接在此解决即可。即头痛医头,脚痛医脚。

很多情形下,真正的原因不在显示异常的地方,比如收到了异常的事件、或参数不合理、或自身状态机的问题等。这时候就需要追溯,为什么会有这样的事件或消息?有时候,由于复杂系统的程序员没有系统的视角,常以为消除了故障表面现象就是解决了问题。很多时候站在系统的视角,可以从多个层面加以解决,消除异常事情,可以从规则过滤模块解决,也可从前置模块或后续模块解决。具体在哪儿解决最合理,这就需要有系统和结构的视角。当然,也曾遇到有人解决类似问题是屏蔽异常消息或者屏蔽ASSERT,并没从根源去消除为什么产生了异常。

3.2.3 报错点发生在第三方库内部

软件报错的地方是在第三方库,而第三方库有没有源代码或不熟悉

如果集成的第三方库没有源代码,则把这个问题上报给第三方,让第三方给出内部出错的原因,更新库或者配合抓日志分析。如果第三方库有源代码的话,可分析第三方代码,增加日志或检查传入第三方库函数的参数是否正确,是否合法;大多数时候,是错误地传入了不合适的参数给第三方库。检查使用第三方的时序是否正确,在软件系统中,时序是一个非常重要,同样的函数,同样的代码,如果时序不对,也会导致代码逻辑紊乱。不过现在提供库或者SDK,一般都有技术支持,也可直接寻求帮助。

3.2.4 软硬件结合导致的无法定位的问题

嵌入式系统中,有时候会出现硬件异常导致软件状态或逻辑错误,硬件人员很难根据有限的信息判断硬件到底怎么了,通常软件和硬件就会反复的踢皮球。但是用户角度看到的异常是在软件这边。

由于硬件团队对客户现场的设备,通常没有检测手段来判断是否真是硬件问题的,软件团队最好能够通过日志配置,确认硬件故障单元。或者直接将坏机寄回硬件部门,软件配合复现问题,以帮助硬件团队判断。

硬件故障问题,需要特别关注供电时钟信号,复位时间等,曾经遇到几次因为串口漏电出去导致外部传感器复位异常的问题。总之,软硬件的交合处,是容易扯皮的地方,这需要软件人员也同时了解硬件的工作原理,在出故障时,能够更好的判断是软件异常,还是硬件真的有故障。

还有一个商业上的问题,如果客户感受到是硬件的问题,需要回收设备,会造成很大的经济损失。一般情况下是软件想办法规避异常,毕竟软件复制不需要成本。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件
    +关注

    关注

    67

    文章

    4350

    浏览量

    85639
  • 嵌入式软件
    +关注

    关注

    4

    文章

    228

    浏览量

    26386
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66809
收藏 人收藏

    评论

    相关推荐

    什么叫嵌入式软件

    什么是嵌入式软件我们都知道,计算机系统可以处理各种数据、管理各种数据,我们这里所说的数据是包括文字、数字、图片以及各种指令。计算机系统就象人的大脑,记忆我们经历过的各种信息,帮我们分析各种信息,还可
    发表于 04-20 08:45

    嵌入式软件专家-珠海

    上述OS驱动模型;2、资深Linux和RTOS内核分析设计编程调试能力,快速分析解决开发中问题;3、担任过核心嵌入式软件架构实现工作,能够深入理解既定
    发表于 03-06 15:13

    几种嵌入式软件代码压缩技术的比较分析

    对于嵌入式软件而言,代码尺寸是越小越好。压缩代码以适应受到成本或空间限制的存储子系统已经成为嵌入式系统开发的一项重要事务。ARM、MIPS、IBM以及ARC都提供了降低存储器占用的技术,本文将对这几种架构中代码压缩技术的实现进行
    发表于 05-16 10:44

    基于UML嵌入式软件的指纹门禁系统开发应用

    嵌入式系统的开发是一个软硬件协同设计过程,它需要不同技术背景的人共同开发.而传统的嵌入式软件分析与设计方法严重脱节,开发过程没有—个确定的统一的标准,这使得产品形成的每一个过程人为因素
    发表于 07-18 07:47

    软件嵌入式软件区别

      纯软件嵌入式软件区别为:  1、定义不同  ①嵌入式软件就是嵌入在硬件中的操作系统和开发工
    发表于 06-28 11:36

    RVS嵌入式软件分析套件介绍

    RVS — 嵌入式软件分析套件
    发表于 01-15 06:28

    嵌入式软件与非嵌入式软件的区别?

    学习笔记一:嵌入式系统课程学习储备知识:C语言+单片机(硬件的工作原理)1、嵌入式技术是什么?嵌入式软件与非嵌入式
    发表于 07-19 08:00

    嵌入式软件与非嵌入式软件的区别

    嵌入式软件与非嵌入式软件的区别嵌入式:在已有的硬件上移植(需要修改操作系统源码,安装不需要)操作系统解决软硬件耦合导致的问题。
    发表于 10-27 06:18

    分析嵌入式系统的技术特点

    基于嵌入式系统的概念,阐述嵌入式系统的关键技术、嵌入式开发以及广泛的应用。分析嵌入式系统的技术特点,分别从
    发表于 10-27 09:51

    什么是嵌入式软件

    概述:什么是嵌入式软件?与传统软件不同,嵌入式软件需要将软件
    发表于 10-28 08:45

    嵌入式软件与非嵌入式软件的区别

    1.嵌入式技术是什么?嵌入式软件与非嵌入式软件的区别?与单片机开发的区别?
    发表于 11-08 08:22

    嵌入式软件和非嵌入式软件区别

    1.什么是嵌入式技术?嵌入式技术是以应用为中心,以计算机技术为基础的系统技术。它初起源于单片机技术,是各类数字化的电子、机电产品的核心,主要用于实现对硬件设备的控制、监视或管理等功能。2.嵌入式
    发表于 12-21 07:41

    嵌入式软件和非嵌入式软件有什么区别

    丹尼斯·里奇,C语言之父,UNIX之父。什么是嵌入式嵌入式软件和非嵌入式软件有什么区别操作系统BSP,驱动,内核操作系统的优点
    发表于 12-24 06:38

    嵌入式软件的问题分析

    嵌入式软件的问题分析 1 问题背景一切为了进度,软件开发的首要目标就是以最快的速度满足客户需求,“快”是第一要素,但是短期指标;可复用性、扩展性等长期指标被忽略,导致后期的维护、功能增
    发表于 11-17 09:29

    嵌入式硬件和软件哪个好?

    方案,要求理解嵌入式系统架构,有一定的C语言基础,熟悉ARM、protel设计软件,有四层板开发经验。 成为优秀的嵌入式硬件开发工程师需具备以下技能:由需求分析至总体方案、详细设计的规
    发表于 12-05 15:17