ARM32开发--下载&仿真&调试

知不足而奋进 望远山而前行


目录

文章目录

前言

仿真器

调试器

调试接口

调试协议

市面烧录调试器

调试流程

总结


前言

在嵌入式系统开发的世界里,仿真器和调试器是两个不可或缺的工具,它们帮助开发者跨越从代码编写到硬件运行的鸿沟。特别是在ARM架构的微处理器或微控制器上进行开发时,仿真器和调试器的使用尤为重要。仿真器提供了一个模拟的环境,允许开发者在没有实际硬件的情况下测试和调试代码。而调试器则提供了一种连接到实际硬件的方式,使开发者能够实时地观察和操控运行中的程序。本文将详细介绍ARM仿真器和调试器的基本概念、特点以及它们在嵌入式系统开发中的应用。


仿真器

ARM仿真器是用于模拟ARM架构微处理器或微控制器的工具,以便开发和测试嵌入式系统软件。这些仿真器允许开发人员在计算机上模拟ARM处理器的执行,而无需实际的硬件设备。ARM仿真器通常包含以下特点:

  1. 指令级仿真: 提供对ARM指令级别的仿真,使开发人员能够逐步执行和调试他们的代码。这有助于发现和纠正程序中的错误。
  2. 硬件级仿真: 一些仿真器提供对ARM处理器内部结构的硬件级仿真。这样的仿真器允许开发人员查看和理解处理器的内部状态,包括寄存器、缓存和其他关键硬件组件。
  3. 外设仿真: 能够仿真与ARM处理器相关的外设和设备,例如UART、SPI、I2C等。这使得开发人员可以在仿真环境中测试与外围设备交互的代码。
  4. 调试功能: 提供强大的调试功能,如断点、单步执行、观察寄存器和内存等。这些功能使开发人员能够更容易地定位和修复代码中的问题。
  5. 多核仿真: 一些高级仿真器支持多核处理器的仿真,以模拟多核系统中的并发执行和通信。
  6. 性能分析: 一些仿真器还提供性能分析工具,以帮助开发人员了解他们的代码在模拟环境中的执行性能。

注:目前市面上最流行的是普中ARM仿真器V9版,可以配合Keil、IAR、ADS、OpenOCD等开发环境进行仿真。通常ARM仿真器也可以进行烧录操作,但是尺寸较大,价格较贵。早期没有办法让硬件MCU单步执行,只能通过特殊的方式模拟真实运行环境进行代码调试。

但是,目前主流的MCU (ARM全系, C51等等)都已内部支持了SW/JTAG调试,因此,仿真需求逐渐被真机调试所替代,企业开发越来越少用到仿真。而是通过调试器进行断点调试,单步执行。

调试器

ARM调试器是一种用于调试ARM架构微处理器或微控制器的工具,它通常与硬件调试接口(如JTAG或SWD)结合使用,允许开发人员观察、分析和调试他们的代码。以下是一些ARM调试器的特点:

  1. 硬件调试接口支持: ARM调试器通常支持标准的硬件调试接口,如JTAG(Joint Test Action Group)或SWD(Serial Wire Debug),用于连接目标系统的调试端口。
  2. 实时调试: 提供实时调试能力,允许开发人员在目标系统上观察代码执行的情况,包括寄存器状态、内存内容以及各种外设和设备的状态。
  3. 断点支持: 允许设置断点,使程序在指定的条件下停止执行。这有助于定位和修复代码中的问题。
  4. 单步执行: 提供单步执行功能,允许开发人员逐一执行代码,更详细地分析程序的执行过程。
  5. 观察寄存器和内存: 可以观察和修改处理器寄存器的值,同时查看和编辑目标系统的内存内容。
  6. 调试信息支持: 对于使用高级编程语言(如C或C++)编写的程序,调试器通常支持调试信息,帮助开发人员直观地理解源代码和目标代码之间的对应关系。
  7. 多核调试: 针对多核处理器的系统,一些调试器支持同时调试多个处理核心,使开发人员能够分析多核系统的交互和并发行为。
  8. 性能分析: 一些高级调试器提供性能分析工具,帮助开发人员识别代码中的性能瓶颈,并进行优化。
  9. RTOS(实时操作系统)调试: 对于嵌入式系统,一些调试器具备RTOS调试功能,能够与实时操作系统集成,帮助开发人员分析系统的实时行为。

编者按:

调试并非开发的必备环节,通常是在解决棘手的bug时,使用的技巧。但是代码单步执行,断点调试的思想要进行吸收,高手从来不依赖于工具,因为整个代码运行流程应该已经在脑中跑了很多遍,哪里可能出问题,一个简单的log日志通常即可辨明。

要学会摆脱对工具的依赖,从更高的维度定位问题,分析问题,解决问题!

调试接口

调试接口通常配合串口(COM)进行数据打印,目前使用的最多的接口是SWD,因为其接线简单,使用方便大部分MCU都支持。这里表格里的引脚省略了 VCC和GND。实际开发时,要根据需要对MCU电路板进行供电接线。

SWD

JTAG

全称

Serial Wire Debug

Joint Test Action Group

联系

较新的调试接口,用于ARM处理器架构

较老的调试和测试接口标准

区别

相对简单,适合资源有限的系统

功能较为复杂,可以用于多个设备的调试和测试

引脚

通常只需要2根
SWDIO(Serial Wire Data Input/Output):用于数据输入和输出

SWDCLK(Serial Wire Clock):用于时钟信号

通常需要5根或更多
TCK(Test Clock):测试时钟

TMS(Test Mode Select):测试模式选择

TDI(Test Data Input):测试数据输入

TDO(Test Data Output):测试数据输出

TRST(Test Reset):测试复位

出品

ARM

IEEE的Joint Test Action Group (JTAG)

可以在Keil的Debug中根据你的接线,切换不同的Port (默认的SW即SWD)

调试协议

查看Keil支持的调试协议

其中最常用的有 ST-Link、DAP-Link、J-LINK ,支持这些协议的设备都可以在某宝直接买到。

市面烧录调试器

目前推荐使用DAP-Link加COM串口调试功能的烧录器,DAP-Link是开源协议没有法律风险,烧录和调试都可以实现,其次有RX、TX的串口引脚,方便日志打印、发送测试串口数据。价格上也十分诱人。

J-LINK

ST-LINK V2官方版

ST-LINK V2平替版

DAP-LINK 开源版(推荐)

DAP-LINK 增强版 (推荐)

商品详情

调试流程

Debug_project.zip

编译项目

点击编译所有文件

准备调试

设置优化级别为-O0 (不优化)

开始调试

点击进入调试模式,此时keil会将最新的固件进行烧录,并进入调试模式

设置断点并执行代码

先在需要的地方设置断点,然后点击执行代码,代码即可在运行到红点所在行时停止(注:停下时,断点所在行并没有执行)。此时我们可以查看断点所在函数的局部变量以及所有全局变量的值。

注意:

如果需要在运行时查看变量的值,而不是断点时才能显示。则需要把变量声明放到函数外,成为全局变量。否则会出现其数值为cannot evaluate<not in scope>的现象

重置CPU

点击该图标,可将所有变量及CPU寄存器重置,类似于重启设备

退出调试

再次点击刚刚那个调试图标即可退出调试模式


总结

仿真器和调试器是ARM嵌入式系统开发中的两大重要工具,它们共同构成了开发者与代码和硬件之间的桥梁。仿真器通过模拟ARM处理器的行为,使得开发者能够在软件环境中测试代码,而无需担心硬件的不可用性。调试器则通过物理连接至ARM处理器,允许开发者实时地观察和控制程序的执行,从而更快地定位和解决问题。无论是仿真器的指令级仿真、硬件级仿真,还是调试器的断点支持、单步执行,这些功能都在极大地提高开发效率和代码质量方面发挥了关键作用。随着技术的发展,仿真器和调试器也在不断地进化,以适应更复杂、更高性能的ARM处理器的需求,为嵌入式系统开发者提供更加高效和便捷的开发体验。

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛慕昭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值