嵌入式软件调试(Debug)方法

news2025/7/8 8:56:24

嵌入式软件调试(Debug)方法

  • 1 问题定位和分析方法
    • 1.1 二分定位法
    • 1.2 数据流方法
    • 1.3 隔离法
    • 1.4 汇编法
    • 1.5 ABA法
    • 1.6 版本回溯确认法
    • 1.7 调试IO法
  • 2 调试注意事项
  • 3 典型问题类型

1 问题定位和分析方法

1.1 二分定位法

方法阐述
在任务中或者可能出现问题的模块中,屏蔽一半的任务或者代码,在执行确认问题是否消失。

简单示例
问题:明确知道在任务A中出现了复位问题,且只有一个位置存在问题,如何快速定位在哪个函数中出现复位?

#当然我们知道,通过调试器单步是最简单的,暂时不使用这种方式

二分法排查步骤
1)、屏蔽func1()、func2()、func3(),如果出现问题消失,则确认问题在此三个函数中,反之则在另外三个函数中;
2)、假设步骤一中问题消失,则可继续屏蔽func1()、func2(),观察问题是否存在,判断依据同上;
3)、重复上述步骤,则可找到出问题的函数,细分甚至可以明确定位代码语句。

#上述是在假设问题只存在一个位置,如可能存在多个位置,则需要更多排查步骤(需要明确知道某一块代码不会出现问题,不能依据一半存在问题就排除另一半正常

Task(A)
{
	func1();
	func2();
	func3();
	func4();
	func5();
	func6();
}

适用的场景
1)、容易复现的问题
2)、不好分析,没有头绪的问题
3)、不方便在线调试的问题,无法设置断点单步调试的问题
4)、大部分问题(只是可能存在更简单的方式)

1.2 数据流方法

方法阐述
依据设计的数据流,从数据产生的源头开始,依据数据的流向,依次确认数据在每个节点的处理正确性。或者方向也可。正确性含义——1)、进入某节点的数据或者流出某节点的数据是否与预期的一致;2)、定位出数据链路上具体哪个节点处理存在问题;

简单示例
1)、图一为简单的模拟开关状态采集原理图
2)、图二为软件在模拟开关开关状态处理的常见步骤/模块(体现了其数据流)

问题:假设开关逻辑处理模块未得到正确的开关状态,应该如何准确的定位问题位置?

数据流分析方法此处以采集端至上层软件的分析方向,也可反向):
1)、确认板端硬件电压正确性(通过万用表、示波器等均可,主要包括两个值:a)、参考电压;b)、开关不同挡位下的电压)
2)、通过调试器观测电压采集模块确认采集后的电压正常与否(若不正常,则取确认MCAL配置)
3)、确认滤波后的电压是否正常(若不正常则排查ADC滤波及换算模块)
4)、以上均无问题,则排查开关状态处理模块(如状态定义的阈值、死区设置等)
在这里插入图片描述
在这里插入图片描述

适用的场景
1)、数据链路清晰
2)、接口之间接口较为简单
3)、节点的输入、输出数据易于获取:在线调试、打印log、通信发送等

1.3 隔离法

方法阐述
定义:单独针对某个模块(函数、子系统等)进行调试
方法:a)、模型仿真(如在Simulink中对功能进行仿真),给模块输入,监控模块的输出;b
)、将模块/函数单独放在单元测试软件中对其进行测试;c)、在线调试,将模块输入替换成可修改的变量,模块输出替换成易观测的变量
工具:劳特巴赫、Tessy、Simulinkdeng

#下图为进行在线调试时,修改的示例:将原有的输入去除(见左侧虚线),将输出增加或者替换成可监控的变量或者其他可观测类型输出
在这里插入图片描述
适用场景
1)、模块之间无耦合性、接口清晰的模块
2)、问题已经可定位至具体的模块
3)、纯粹逻辑问题
4)、针对问题模块进行调试
5)、仿真与在线仿真结合可以排查编译相关问题(如数据类型处理方式等)

1.4 汇编法

方法阐述
1)、对某段代码进行反汇编,在汇编的层次上进行单步执行
2)、查看每一步对应的寄存器值是否正常(通用寄存器、PC、SP等)
3)、查看跳转是否正常

简单示例
某一块RAM地址写入超出实际范围,最后修改了CSA存储区域,导致OS执行完之后无法完成CSA切换,导致OS进入Trap(未保存下来相应记录)
排查方式:单步发现在某一部之后进入OS Trap,根据跳转地址、CSA指针地址等判断出来内存问题

适用场景
1)、定位到具体语句却无法查出问题根源
2)、程序莫名奇妙跑飞问题
3)、BT跳转追踪
4)、其他怪异的问题

1.5 ABA法

方法阐述
使用A组件存在问题,将A组件替换成B组件故障消失,再将B组件替换回A组件,故障复现

简单示例
问题描述:某功能与MCU、SOC以及芯片A相关,在该控制器上功能不能正常使用,其余注入相同软件的控制器正常,因此你无法判断是电路问题还是芯片A本身问题?

排查方式
1)、将芯片A替换成在其他控制器上能正常工作的芯片B,看控制器是否能正常工作
2)、将芯片A在其他正常控制器上进行验证,可以验证芯片A的状态,同时印证步骤一的结论

#ABA方法不一定与描述的一致,记住其思想“替换硬件已验证硬件状态”即可
在这里插入图片描述

适用场景
1)、软件硬件问题界定(无法分辨软件还是硬件导致,可将相关芯片进行替换验证)
2)、外围设备问题(如烧写器、CANoe等),通过更换肯定是好的设备验证设备问题

1.6 版本回溯确认法

方法阐述
1)、将整个软件或部分模块回滚至确认功能好使的版本,确认相应的故障状态是否消失
2)、将问题版本软件与正常版本软件进行对比分析,针对修改项进行分析

#这是常用的方式,此处就不做示例说明

适用场景
1)、因软件修改而出现的问题
2)、用于快速分析解决问题
3)、须有完善的版本管理系统

1.7 调试IO法

方法阐述
翻转IO/IO跳变,通过外部观测设备(如示波器)确认代码执行情况

简单示例
问题描述:第二个功能必须在第一个功能结束后4s后才能触发(严格时序问题)

测试方法:功能触发时将某一个IO口拉高,关闭时将电平拉低,如图绿色和蓝色分别表示一功能触发与结束(高电平时触发,低电平时关闭),通过示波器就能捕捉相关功能之间的时间间隔

#IO法对于时间测试、时序测试等十分适用,但注意用于测试时若占用某功能接口,在测试完成后须删除测试代码,复原相关功能
在这里插入图片描述

适用场景
1)、分支执行情况分析
2)、时间间隔分析

2 调试注意事项

1)、首先确认硬件状态

2)、调试时尽量关闭看门狗
a)、调试看门狗时除外
b)、防止复位时不易发现
c)、有时可看到程序死在什么地方

3)、底层问题尽量结合手册

3 典型问题类型

寄存器设置问题、异常处理不完善、数组越界、时序错误、硬件问题、运算溢出、配置错误、栈溢出、运算溢出等

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

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

相关文章

Redis介绍与下载

初识Redis Redis介绍 由Salvatore Sanfilippo写的key-value存储系统,是跨平台的非关系型数据库 Redis通常被称之为数据结构服务器,因为值(value)可以是字符串、哈希、列表、集合和有序集合等类型 Redis是完全开源的遵守BSD协议,是一个高性能的…

看着别人月入过万,30岁想转入做软件测试,有什么难度?

我见过很多30岁转行软件测试成功的,也见过软件测试转行失败的。 说实话,30岁转行需要付出比一般人更加多的努力。 并且每一步的路都不能走偏。 30岁了,转行肯定不像才毕业的小年轻那么容易,毕竟你转行要跟社会上已经从事过几年的…

Android移动应用开发之使用room实现数据库的增删改查

文章目录前言核心代码前言 我们直接开门见山,展示一下效果: 数据库的插入和查询: 数据库的修改和查询: 可以看到id为23的数据发生了修改。 删除一条数据: 可以看到id为23的数据被删除了 删除全部数据&#xff1…

Sedex验厂有证书吗?

【Sedex验厂有证书吗?】 SEDEX 是一个全球性的会员制组织,旨在帮助企业在负责任商业中去繁存简,携手共进。买家、供应商和审计员可以在平台上快速轻松地储存、共享和报告信息。 SMETA(Sedex Members Ethical Trade Audit&#xff…

日本知名汽车零部件公司巡礼系列之株式会社111

株式会社111 业务内容: . 在所有领域的零件缴纳各种都有相应的实际业绩 (例)OA器械、光学器械、汽车其他运送器械、医疗器械、各种制造装置零件、机器人相关零件、能源相关零件、航空相关零件等 广泛应对各种材料产品 铁、铝、不锈钢、合…

【FLASH存储器系列八】ONFI数据接口详述之一

目录 1.1 数据接口类型概览 1.2 信号功能分配 1.3 接口模式切换 1.1 数据接口类型概览 ONFI目前支持5中不同的数据接口类型:SDR,NV-DDR,NV-DDR2、NV-DDR3和NV-LPDDR4。SDR是传统的NAND接口,使用RE_n锁存读数据,WE_n锁…

MSP430F5529库函数——模数转换模块(ADC12)软件触发

需提前观看:MSP430F5529库函数学习——串口 目录 代码 ADC初始化部分 引脚复位 ADC12_A_init() 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable()…

有关javascript中事件对象e

一、简单认识e 事件对象e,是event的简称。当一个事件被触发时候,这个事件的有关数据都会被存储在一个事件对象e里面,这个对象e有许多固定方法提供给我们查看里面各种数据。 二、关于e对象的常用属性介绍 1. e.eventPhase查看事件触发所处的阶…

MySQL索引原理笔记

注意:本博客为个人学习记录,不保证正确性,仅供参考指正 MySQL索引原理以及SQL优化 文章目录MySQL索引原理以及SQL优化索引与约束覆盖索引最左匹配规则索引下推(面试重点)索引存储索引失效如何解决sql比较慢的问题索引…

【JavaWeb】JSP(172-190)

172.Jsp-什么是jsp,以及它有什么作用 jsp 的全换是 java server pages。Java 的服务器页面。 jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。 因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。 Servlet 回传 htm…

大白话讲解MySQL 索引,页分裂,行溢出,事务

目录 一、索引 索引是什么,页分裂 页的结构 mysql怎么查询数据 二、页合并 三、行溢出 四、事务 事务四大特性 1、原子性 2、一致性 3、隔离性 4、持久性 事务隔离级别 隔离级别导致的问题 隔离级别与锁的关系 锁与快照读、当前读的关系 RR快照读与…

网页信息采集-网页数据采集方法

随着社会不停的发展。人们也是越来越离不开互联网,今天小编就给大家盘点一下免费的网页信息采集,只需要点几下鼠标就能轻松爬取数据,不管是导出excel还是自动发布到网站都支持。详细参考图片一、二、三、四! 企业人员 通过爬取动…

[附源码]计算机毕业设计JAVA创意众筹网站

[附源码]计算机毕业设计JAVA创意众筹网站 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

JavaScript历史上的今天是星期几

前言 👏这个案例有很多点是我之前不知道的(因为是小白),所以很值得学习, ✍编程不是打字机,⭐争取明白每个细节,并努力做的更好 步骤 1.html布局,一个下拉菜单(如图&…

独家巨献!阿里专家兼Github贡献者业“大师级Dubbo实战笔记”入门到成神

Apache Dubbo是一款RPC服务开发框架,那何为RPC呢?全称为Remote Procedure Call,翻译过来就是远程过程调用。 使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可…

ZYNQ使用AXI4-HP接口总线读取DDR中的数据

一、前言 最近笔者在做项目的时候需要使用zynq中的AXI4-HP总线在PL端读取DDR中的数据这种功能,但是网上很多历程对于这方面只是创建了一个官方提供的IP核用于测试,并且每次写入和读取的长度为4K字节。所以为了满足我自己的项目需求,笔者将官…

电脑桌面图标不见了怎么回事?正确的找回图标的2个方案

最近遇到很多用户朋友说自己的电脑桌面图标不见了,觉得很奇怪。用户以为是系统原因造成的。电脑桌面图标不见了怎么回事?图标删除了怎么办?这篇文章就给大家分享如何找回电脑桌面消失的图标,一起来看看吧! 一、找回电脑…

DTPA PEG 异硫氰酸荧光素,DTPA PEG FITC,FITC-PEG-DTPA

产品名称:DTPA PEG 异硫氰酸荧光素 英文名称:DTPA PEG FITC,FITC-PEG-DTPA CAS:668-000-2 产地:西安 规格:1mg 5mg 10mg 纯度:99% 厂家:西安齐岳生物科技有限公司 用途&#…

arthas的监控java性能

目录1 arthas简介2 arthas下载3 arthas的使用3.1 arthas启动3.2 常用命令3.2.1 dashboard3.2.2 thread3.2.3 jad3.2.4 watch3.2.5 getstatic3.2.6 heapdump3.2.6.1 dump到指定的文件3.2.6.2 dump live 对象3.2.6.3 dump 到临时文件3.2.7 jvm3.2.8 logger3.2.9 mbean3.2.9.1 列出…

Baklib|我的企业是不是需要一个维基页面呢?

你很可能已经听说过维基百科。事实上,我们大多数人几乎每天都在使用维基百科来获取有关历史事件、名人或世界各地的有用信息。但是你知道公司也可以创建和维护他们自己的wiki页面吗? 随着时间的推移,公司会积累大量的信息。如果没有一个好的方法来存储…