首页 > 其他分享 >嵌入式的核心能力-Debug调试能力(一)

嵌入式的核心能力-Debug调试能力(一)

时间:2024-09-27 22:22:46浏览次数:10  
标签:bin -- 能力 嵌入式 test 地址 寄存器 Debug 断点

一、栈回溯

引入:调试程序时,经常会发生这类错误:

读写某个地址,程序报错;调用某个空函数,导致程序报错等等。

解决方法是,可以利用异常处理函数去打印出“发生错误瞬间”的所有寄存器地址

根据这些打印出来的地址信息,回溯发生错误的位置,并且需要知道位于调用链路。

1.栈回溯的原理

本质还是看汇编,C语言函数的返回地址,保存在栈里、

2.修改异常处理函数打印栈内容

位于硬件错误异常中 HardFault_Handler 都是死循环,并不能提供更多的信息,例如RT thread做的就很好,会有对应的寄存器信息 以及相关反馈。

整个流程大致为:发生错误

中断运行->硬件 原本LR先入栈 LR等于异常返回地址 保存程序状态(软件也要保存硬件保存剩余寄存器) 返回地址PC值->执行异常向量函数 打印栈

STMFD   r0!, {r4 - r11}         ; push r4 - r11 register
STMFD   r0!, {lr}               ; push exec_return register

来自RTthread的函数

3.分析stack,找出函数调用关系

得到反汇编,例如fromelf --text -a -c --output=all.dis test\test.axf

通过分析反汇编以及地址

二、修改bin文件实现断点

引入:什么情况下需要打断点,在没有调试器,不方便使用调试器,想查看代码任意位置的状态

如何触发?修改原来的代码 改为未定义指令 并且修改异常处理函数打印寄存器和栈内容

需要得到.dis以及.bin 比如MDK是利用

fromelf  --text  -a -c  --output=all.dis    test\test.axf
fromelf  --bin  --output=test.bin test\test.axf

本质是通过软断点的方式实现(把正确的指令改错),软断点的关键是利用特定的指令替换被调试程序中的某些指令,迫使程序在执行到该位置时产生异常。

硬断点就例如MDK中打的断点了有限制次数,处理器硬件支持的调试机制,例如位于flash中打断点,ARM架构的功能watchpower,并且有次数限制。

重新烧写

标签:bin,--,能力,嵌入式,test,地址,寄存器,Debug,断点
From: https://blog.csdn.net/weixin_64593595/article/details/142603564

相关文章

  • 鸿蒙(HarmonyOS)实战开发篇——基于ArkUI现有能力实现自定义弹窗封装方案
    推荐看点鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总【OpenHarmony】鸿蒙南向开发保姆级知识点汇总~持续更新中……场景描述自定义弹窗是应用开发需要实现的基础功能,包括但不限于HarmonyOS开发者文档中定义的模态、半模态、Toast等形式,封装一个好用且和UI组件解耦的弹窗组......
  • 嵌入式学习--数据结构+算法
    嵌入式学习--数据结构+算法数据结构1.1数据1.2逻辑结构1.3存储结构1)顺序存储结构2)链式存储结构1.4操作(数据的运算)算法2.1算法与程序2.2算法与数据结构2.3算法的特性2.4如何评价一个算法的好坏?2.5时间复杂度2.6空间复杂度数据结构数据的逻辑结构、存储结构、......
  • Volcano新版本发布:10大功能提升统一调度和细粒度资源管理能力
    本文分享自华为云社区《Volcanov1.10.0版本正式发布!10大功能全面提升统一调度和细粒度资源管理能力》,作者:云容器大未来 近日,Volcano社区v1.10.0版本[1]正式发布(Branch:release-1.10[2]),此次版本增加了以下新特性:新增队列优先级设置策略支持细粒度的GPU资源共享与回收支持Po......
  • 嵌入式学习——进程间通信方式(2)—— 信号
    一、基本概念什么是信号:由进程或系统发出的,用来通知发生了某个事件,希望接收方进行响应。    信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。正如我们所了解的中断服务函数一样,在中断发......
  • 新手答疑 | 零基础该怎么学习嵌入式?嵌入式Linux学习路线是什么?嵌入式开发板推荐?
    很多初学者想要涉足嵌入式Linux开发领域,但往往在刚入门阶段,会因为初次接触到大量复杂的概念术语和深奥的技术文档感到压力重重,面对这些内容不知从何下手,感到十分迷茫,网上的内容也纷繁复杂,没有清晰的学习线路,看完后甚至更蒙圈。实际上,嵌入式Linux开发并没有想象中的那样高不可攀,关键......
  • 嵌入式常用硬件电路设计及分析 — 通信篇
    目录一、简介二、RS232通信1、硬件电路设计2、硬件电路设计分析(1)常规电路(2)EMC设计使用注意事项3、DB9接头定义三、RS485通信1、硬件电路设计2、硬件电路设计分析(1)自动收发电路(2)上下拉电阻注意事项(3)TVS管作用(4)末端匹配电阻作用四、USB转串口(1)常规电路设计(2)ISP......
  • 51c嵌入式~电路~合集6
    一、单片机中用二极管实现不同电压的输出用二极管的单向导电性可以设计出好玩、实用的电路。    分享本文,分析限幅电路和钳位电路,是如何用二极管来实现的。限幅电路VIN大于等于0.7V,二极管正向导通。此时,VOUT会被钳位在0.7V上。    而当VIN小于0.7V时二极管是截止状态,在负半......
  • 八大核心能力铸就销售精英:解锁成功销售的密钥
    成功销售,既是精妙绝伦的艺术展现,也是融汇多元技能的卓越实践。无论企业处于初创的萌芽阶段,还是屹立行业的巅峰之列,跨越销售高峰的征途上,销售人员所掌握的八大核心能力,如同星辰指引,不可或缺。这八大能力,如同精密齿轮,紧密咬合,共同铺设了一条通往辉煌业绩的坚实之路。卓越的沟通能......
  • 【有啥问啥】大型语言模型的涌现能力(Emergent Abilities):新一代AI的曙光
    大型语言模型的涌现能力(EmergentAbilities):新一代AI的曙光随着人工智能技术的飞速发展,大型语言模型(LargeLanguageModel,LLM)展现出了令人惊叹的涌现能力。这种能力并非模型规模简单线性增长的结果,而是在模型达到一定复杂度后,突然涌现出的一系列复杂能力,如深层语义理解、逻......
  • 解锁 JavaScript 的超能力:变量的魔力
    从今天开始,我们将探索编程的世界。?你拥有超能力的世界。是的,你没看错,超能力。如果不是超能力,那又是什么?使用javascript,您可以让物体飞、移动、消失、改变颜色,并在数英里之外看到您的朋友,而这只是可能的一小部分。是的,一切都在你的屏幕上,但仍然非常令人兴奋。像任何超级英雄一样,......