首页 > 其他分享 >ARM32开发--下载&仿真&调试

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

时间:2024-06-15 16:57:07浏览次数:27  
标签:仿真 开发人员 -- ARM32 仿真器 断点 ARM 调试 调试器

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


目录

文章目录

前言

仿真器

调试器

调试接口

调试协议

市面烧录调试器

调试流程

总结


前言

在嵌入式系统开发的世界里,仿真器和调试器是两个不可或缺的工具,它们帮助开发者跨越从代码编写到硬件运行的鸿沟。特别是在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处理器的需求,为嵌入式系统开发者提供更加高效和便捷的开发体验。

标签:仿真,开发人员,--,ARM32,仿真器,断点,ARM,调试,调试器
From: https://blog.csdn.net/xuewenyu_/article/details/139704929

相关文章

  • 为什么程序员老喜欢买云服务器?
    前言不知道你发现了没有?作为程序员或者测试工程师的你,身边的同事或者同学,都喜欢买一台或者多台云服务器。为什么呢?他们是为了耍酷?答:当然不是。云服务器对我们来说真的非常有用。不信继续往下看。今天这篇文章就跟大家一起聊聊,云服务器的一些用途,为什么程序员老爱买云服务器......
  • 原子操作 CAS
    假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁CAS操作如......
  • 2024-06-15:用go语言,Alice 和 Bob 在一个环形草地上玩一个回合制游戏。 草地上分布着一
    2024-06-15:用go语言,Alice和Bob在一个环形草地上玩一个回合制游戏。草地上分布着一些鲜花,其中Alice到Bob之间顺时针方向有x朵鲜花,逆时针方向有y朵鲜花。游戏规则如下:1.游戏从Alice开始。2.每个回合中,当前玩家必须选择顺时针或逆时针,并在所选方向上摘取一朵鲜花。......
  • 6.15 七桥问题,欧拉回路
    欧拉回路就是,用一条线,走过所有的路,而且不重复,这种问题使用了并查集并查集分为两个部分:查找:1.初始化,将每个节点都初始化成一颗树find():根据给的边,找到他们的根节点,并更新union():把根节点不一样的连成一颗树,实现几棵树变成一棵树并查集的作用:在于判断所有的节点是不是属于同一个......
  • 全双工与半双工技术解析
    随着信息技术的迅猛发展,通信系统的性能要求日益提高。在数据传输中,双工模式的选择对于提高系统效率、降低通信延迟具有重要意义。一、全双工模式全双工模式允许数据在通信链路的两个方向上同时进行传输,即A到B的同时可以B到A。这种通信方式极大地提高了数据传输的效率和实时性。......
  • Codeforces Round 947 (Div. 1 + Div. 2)
    发现今天做不了一点题,遂来补以前的比赛。B.378QAQandMocha'sArray秒了。排序,取最小的数记为\(x\),再取最小的无法被\(x\)整除的数记为\(y\),如果仍然存在无法被\(y\)整除的数,则无解。C.ChamoandMocha'sArray容易想到一个结论:如果一个数比它左边或右边的数小,那么......
  • 53.最大子数组和
    中等 相关标签相关企业 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。  示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1]的和最......
  • ElasticJob浅谈
    ElasticJob浅谈1什么是Elastic-JobElastic-Job是当当网开源的一个分布式调度解决方案,基于Quartz二次开发的,由两个相互独立的子项目ElasticJob-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite,它定位为轻量级无中心化解决方案,使用Jar包的形式提供分布式任务的协调服务,而Elastic-......
  • 2024中育云备份下载专用网址
    说明Introduction如在使用过程中有任何问题,请及时与我取得联系。由于本人写的所有下载器都挂在ezy服务器上,所以说会涉及跨域访问当出现登录问题时,请确保,网址栏中应为http://...,而不是https://...在线专栏登录器http://ezy-sxz.oss-cn-hangzhou.aliyuncs.com/zxzllogin.htm......
  • 农业气象综合监测站:农业智能化革命的强力助推器
    科技之光正在点亮农业领域,引领其迈向智能化的新纪元。其中,农业气象综合监测站无疑成为这场革命中的璀璨明星,它以强大的功能深度剖析气象条件与农业生产间的紧密联系,为农业生产提供精准的决策支持,从而大幅提升生产效率和安全性。  农业气象综合监测站的核心职责在于实时、精准......