【ARM Trace32(劳特巴赫) 使用介绍 3 - trace32 访问运行时的内存】


请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】


上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】
下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 4 - Trace32 Discovery 详细介绍】

1.1 trace32 访问运行时的内存

1.1.1 侵入式 运行时内存访问

侵入式意思是CPU周期性的停止和启动,这样外部debugger才可以使用CPU的 load/store指令访问内存内容。
在这里插入图片描述
这种方式下,debugger和cpu看待内存的方式是一样的,但是这样方式限制了“运行时”的特点。

1.1.2 非侵入式运行时访问

非侵入式就意味着 CPU不用停止下来 当进行memory访问的时候。所以外部debugger就不能使用cpu来进行内存的访问了,所以debugger 必须使用 DAP的方式来进行访问,例如 通过 AHB 和 AXI 总线进行访问,前提是 AHB或者AXI 口必须映射到 memory上。
在这里插入图片描述

1.1.3 缓存一致性的非侵入式运行时访问

这种访问指的是 AHB/AXI 总线绕过 cache 进行访问,在下面的例子中 变量 myVar 只会在 cache 中更新并没有写入到memory中,它的当前状态对外部 debugger是不可见的。
在这里插入图片描述
下面的例子则不同,它的 cache 策略使用的是write-back 方式,当外部 debugger来读取这个变量时会通过 SCU(Snoop Control Unit) 告知 cache 先将其刷到 memory中,所以 debugger读到的数据和cache中的数是一样的。
在这里插入图片描述
上面这个例子中,cache的维护是通过 SCU进行的,在 AXI 访问的过程中,SCU会触发 cache将数据写入memory中。需要注意AHB没有这种功能。

1.2 Trace32 侵入式和非侵入式 运行时访问

使用Trace32 进行运行时访问的时候需要加上个前缀 E 类, E 表示运行访问,E 可以和其他访问类一块使用,如:Data.dump NSD:<address> 可修改成 Data.dump ENSD:<address>

1.2.1 侵入式访问

可以使用功下面的命令:

SYStem.MemAccess.StopAndGo
Data.dump E:0x100
Var.view %E myVar

1.2.2 非侵入式运行时访问

该访问方式也就是直接DAP访问,可以直接通过AHB或者 AXI来访问,并指定访问“类”。这种访问方式需要硬件定义好 AP(access port)。如果使用了一个常用的芯片,在 Trace32 的脚本中使用 SYStem.CPU 命令之后,Trace 就会将 AP 配置好。

SYStem.CONFIG MEMORYACCESSPORT 1 	; Define memory access port and AXI
SYStem.CONFIG AXIACCESSPORT 1.   	; access port (e.g. port number 1)
Data.dump EAXI:<address> 			; Run-time access via AXI. Prefix “E”
Data.dump EAXI:myVar 				; is optional but recommended to read myVarn via the DAP

在 SoC-400 中可以存在 0-255 个 AP port, 所以需要使用 “AXIAPn.Port <port number>” 来指定是哪个 AP PORT。
在 SoC-600 使用的不是 port number 而是地址,如:sys.config.axiap1.base dp:0x2b170000, 如果 soc 中有三个 AXI-AP port 最好是按照顺序进行设置。

使用 DAP的非侵入是运行时访问的例子如下:

SYStem.CONFIG MEMORYACCESSPORT 1. ; Define memory access port and AHB
// SYStem.CONFIG AHBACCESSPORT 1. ; or AXI access port
SYStem.CONFIG AXIACCESSPORT 1.

SYStem.MemAccess DAP ; Non-intrusive access via AHB / AXI

Data.dump E:0x100 ; Run-time access via DAP. Prefix “E”
Var.view %E myVar ; is required to read 0x100 or myVar

1.3 Trace32 缓存一致性的运行时访问

使用命令: SYStem.Option.AXIACEEnable ON

SYStem.CONFIG.MEMORYACCESSPORT 1. ; Define memory access port and AXI
SYStem.CONFIG.AXIACCESSPORT 1. ; access port (e.g. port number 1)

SYStem.Option.AXIACEEnable ON ; Enable cache coherent transactions
SYStem.MemAccess DAP ; Non-intrusive access via AXI

Data.dump E:0x100 ; Run-time access via AXI. Prefix “E”
Var.view %E myVar ; is required to read 0x100 or myVar

如果想通过Trace32 来访问下图中 VPU或者 NPU上的寄存器,那么需要怎么做?
在这里插入图片描述

  • sys.config.axiap1.base dp:0xxxxxxxxx
  • sys.up
  • d.dump eaxi1:0xxxxxxxxx // 读 NI-700里的地址

详细分析见【ARM Trace32(劳特巴赫) 使用介绍 4 - Trace32 Discovery 详细介绍】

system.attach 与 system.up 命令不同,system.attach 不会对目标系统进行复位。

1.4 Trace32 run bin file

在 fpga/emu上可以使用 trace32使 bin 文件 从sram 中启动:

  • 首先需要将strap pin 设置为从sram 启动;
  • 连接 Trace32,并适应system.prepare 命令进入 prepare 模式;
  • 通过Trace 配置core 进入 wait,比如使用命令Data.Set DP 0x80000B20 %LE %Long 1
  • 通过AHB-AP或者 AXI-AP 将bin 文件写入 sram中,这里以 AXI-AP为例:
sys.config.axiap1.base dp:0x6b200000
d.load.binary /home/sam/test.bin eaxi1:0x90000000
d.dump eaxi1:0x90000000
  • 通过命令释放cpu wait,然后系统将会从sram 中重启:Data.Set DP:x80000B20 %LE %Long 0

命令介绍

  • data.set: 这是 TRACE32 命令,其作用是设定(set)数据(data)。
  • dp: 指定访问数据的方式,这里 dp 代表数据访问点(Data Access Point),通常与特定的存储器或寄存器接口相关。
  • %LE: 这个参数指定了数据的字节顺序。%LE 表示使用小端(Little-Endian)格式。
  • %LONG: 这个参数指定了数据的类型和大小。%long 表示32位长整型数。

1.4.1 CPU 复位与解复位

ARM CPU的复位(Reset)和解复位(Deassert Reset)状态是指处理器从停机状态开始执行指令的过程。这些状态被设计来确保处理器在开机或者需要重新同步时能够以一个已知的、一致的状态开始执行。

1.4.2 复位状态 (Reset State)

当ARM CPU接收到一个复位信号时,它进入复位状态。这通常发生在以下几种情况下:

  • 上电复位:当系统电源首次打开时,处理器会自动进行复位。
  • 外部复位:一个外部信号(例如来自复位按钮或其他硬件组件的信号)可以触发复位。
  • 看门狗复位:如果配置了看门狗计时器并且系统未能在预定时间内响应,看门狗将发出复位信号。
  • 软件复位:软件可以编程性地请求一个复位事件,通常作为异常处理或系统重启的一部分。

在复位状态中,处理器会执行以下动作:

  • 停止执行指令:CPU停止当前的活动并放弃正在执行的指令。
  • 清除寄存器:大多数寄存器,包括程序计数器(PC)、状态寄存器和其他工作寄存器,会被设置为初始状态。
  • 初始化状态机:CPU内部的状态机和控制逻辑会被重置。
  • 清除缓存和流水线:指令和数据缓存可能被清空,流水线被清除。
  • 设置启动地址:程序计数器(PC)被设置为预定的启动地址,通常是一个内存中的固定位置,如0x00000000或0xFFFF0000,取决于具体的ARM架构和实现。

1.4.3 解复位状态 (Deassert Reset State)

解复位状态是指复位信号被释放,CPU开始正常操作的状态。在这个状态,CPU开始从指定的启动地址执行指令。这一过程包括:

  • 执行启动代码:通常是引导加载程序(Bootloader)或初始程序加载器,负责初始化硬件和加载操作系统。
  • 初始化内存和外设:设置堆栈、初始化内存控制器、配置外设接口等。
  • 加载操作系统:如果设备上有操作系统,引导加载程序将负责将其从存储介质(比如闪存)加载到RAM中,并将控制权交给操作系统。

在解复位过程中,CPU开始正常运行,按照启动代码的指示进行操作。这段时间是非常关键的,因为它设置了系统随后运行的基础环境。


上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】
下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 4 - Trace32 Discovery 详细介绍】

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Trace32 Android 是一种用于 Android 平台的调试工具。它是由Lauterbach开发并推出的一款功能强大的调试器和分析仪。Trace32 Android 提供了丰富的功能和工具,帮助开发人员在 Android 设备上进行应用程序的调试、性能分析和优化。 Trace32 Android 支持多种调试技术,包括JTAG,ETM和SWD等。它可以与目标设备之间建立连接,实现对设备上运行的程序进行监视和干预。通过Trace32 Android,开发人员可以使用Trace功能来捕获和分析应用程序的运行时数据,包括函数的执行时间、内存使用情况和性能瓶颈等。同时,Trace32 Android 还支持硬件和软件断点,让开发人员可以在关键的代码位置进行断点调试,以便更好地理解和解决问题。 此外,Trace32 Android 还提供了一套强大的性能分析工具,帮助开发人员深入分析应用程序的性能表现。例如,通过使用可视化图表和时间线,开发人员可以准确地了解应用程序在不同阶段的执行时间和资源使用情况。这样的性能分析功能可以帮助开发人员发现潜在的性能问题,并进行针对性的优化。 总之,Trace32 Android 是一款专业的调试工具,为 Android 应用程序的开发人员提供了全面的调试和性能分析能力。它可以帮助开发人员更好地理解和优化应用程序的性能,从而提高用户体验和开发效率。 ### 回答2: trace32 android是一款适用于Android平台的调试工具。它可以帮助开发人员在开发和调试Android应用程序时进行实时跟踪和调试。 trace32 android提供了一些关键功能。首先,它可以在应用程序运行时收集和显示实时的调试信息。开发人员可以通过trace32 android获取应用程序的内存使用情况、CPU利用率、线程跟踪等信息。这些信息对于识别和解决应用程序中的性能问题非常有帮助。 其次,trace32 android支持与Android设备无缝连接,以便开发人员可以实时监视和控制应用程序的执行。通过trace32 android,开发人员可以追踪应用程序的代码执行路径,设置断点和观察变量的值来确保应用程序的正确性。 此外,trace32 android还支持远程调试功能。开发人员可以将trace32 android连接到运行在远程设备上的Android应用程序,并进行实时调试和监视。这对于开发人员在实际设备上调试和优化应用程序非常有帮助。 总的来说,trace32 android是一款功能强大的调试工具,可以帮助开发人员快速定位和解决Android应用程序中的问题。它提供了实时跟踪和调试功能,支持与Android设备的连接和远程调试功能。开发人员可以通过使用trace32 android来提高应用程序的质量和性能。 ### 回答3: Trace32是一款用于嵌入式系统和软件调试的强大工具,它在Android调试中也起到了重要作用。Trace32可以帮助开发者跟踪和分析Android设备上的运行信息,以帮助开发者快速定位和解决问题。 首先,Trace32可以通过JTAG等调试接口连接到Android设备上,实时获取设备的调试信息。通过Trace32开发者可以查看设备的寄存器、内存和状态信息,以及运行时堆栈和函数调用等详细信息。这对于解决设备崩溃、死机等问题非常有帮助,开发者可以通过分析信息找出问题的根源。 其次,Trace32还支持调试内核和驱动程序,可以对Android设备的内核进行调试。开发者可以通过Trace32工具查看内核的执行状态,查看内核中的函数调用和参数传递等信息。这对于解决Android设备的硬件问题、优化性能等方面也有很大帮助。 此外,Trace32还可以辅助开发者进行代码跟踪和性能分析。开发者可以通过Trace32trace功能对代码进行跟踪,查看代码的执行轨迹和执行时间等信息。这对于分析代码的性能瓶颈、优化代码以及解决其他与代码执行相关的问题非常有帮助。 总的来说,Trace32是一款功能强大的Android调试工具,它可以帮助开发者在开发过程中快速定位和解决问题。无论是解决设备崩溃、死机问题,还是调试内核和驱动程序,亦或者进行代码跟踪和性能分析,Trace32都能够提供很好的支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

主公CodingCos

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

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

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

打赏作者

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

抵扣说明:

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

余额充值