LAUTERBACH使用说明

针对我们使用劳特巴赫加载elf文件的几个思考:
1.固定格式为 data.load.elf [bin对应的elf] /nocode /noregister
其中/nocode /noregister为两个可选指令。
①为什么需要添加 /nocode 指令?
.elf不是一个明文但是一个标准结构体。里面主要分为两个区:代码区和符号区。如果不增加这个指令会出现 elf修改MPU保护的内存段代码的问题。
为什么加载elf会出现修改MPU保护的内存段代码的问题?
因为劳特巴赫支持通过elf刷写程序这种方式。只不过我们J6P这种平台不适合。
为什么J6P这种平台不适合?
因为在地平线J6P的这个项目里,代码太大了,而且整个系统的启动链非常长(先起硬件安全核心HSM,再起大核Linux,最后由Linux去释放和加载M核/R核)。
如果跳过Linux直接用劳特巴赫把R52的ELF强行拍进RAM内存,由于整个芯片的电源时钟总线(Power/Clock Matrix)、引脚复用(IOCONFIG)、甚至是 DDR/SRAM 控制器可能还没被初始化完毕,代码灌进去也根本跑不起来。

②为什么需要添加 /noregister 指令?
防止劳特巴赫强行篡改当前的CPU运行状态(特别是 PC 指针)。

默认情况下,如果直接Data.LOAD.Elf XXX.elf,劳特巴赫不仅想把代码塞进芯片,还会去读这个ELF文件的“入口地址”(Entry Point,通常是汇编启动文件里的_start或者Reset_Handler),然后强行把芯片的PC(程序计数器)寄存器修改为这个入口地址,让芯片准备从头复位执行。
对于实时行系统来说强行接管PC指针会直接影响芯片流水线。

针对我们使用劳特巴赫的几个技巧说明:
右下角鼠标右键可以进行模式切换,一共三种模式:ASM(纯汇编),MIX(混合模式),HLL(源码模式),如果怀疑某段代码可以在三种模式间切换用汇编去发现问题。

ASM:

MIX:

这个窗口是 TRACE32 里面最核心的硬件调试配置窗口 SYStem`。通过它,可以直接控制调试器与芯片之间的连接状态、复位行为、JTAG 物理时钟以及各种 CPU 调试特性。

Mode

  • Down:断开连接。关闭调试接口的驱动,调试器不向芯片发送任何调试指令,芯片完全自由运行。

  • NoDebug:调试器不占用 CPU 资源,CPU 正常运行,但调试器随时可以转换到其他调试模式。

  • Prepare:调试器尝试与目标芯片建立物理层的连接(例如初始化 JTAG/SWD 链路),但此时还不去控制 CPU 的运行。

  • Go:和 Up 类似,但连接成功后让 CPU 立刻直接运行(不挂起)。

  • Attach(非常常用):无感连接/热插拔连接。如果芯片现在已经在板子上正常运行了(比如在跑你集成好的 AUTOSAR 程序),你不想打断它,想在不断电、不复位的情况下连上去看看当前的状态。点 Attach,调试器会直接连上芯片,不改变芯片当前的运行状态。

  • Up(最常用):硬件复位并挂起。它会断开之前的连接,然后通过复位脚(Reset)复位芯片,重新和芯片握手,并在复位向量处(即芯片刚上电、第一行启动汇编)将 CPU 挂起(Halt)。这就是你寻找的“最干净的 Reset 开始”。

MemAccess

AXI支持多路并发的高速系统主干总线,debug行为涉及到读取SRAM和系统总线,默认选择这个即可。

APB则一般为低速外设

CpuBreak

软中断使能

CpuSpot

关注的是某块内存地址的数据是否被读写了。当某个变量被读写时可以立即出发中断。某些场景极其适用,比如某个变量多处写,但是无法判断是谁触发的异常写。

Break.Set &Variable /Write

Option

  • TRST:启用 JTAG 调试口的异步复位引脚(Test Reset)。

  • EnReset:允许 TRACE32 监控或探测目标板上的手动复位信号。

  • ResBreak:非常重要。当发生目标板系统硬件复位(比如看门狗复位、或者手动复位)时,调试器会立刻抓取这个复位信号,并在复位发生的一瞬间将 CPU 挂起断下。这在排查系统意外复位死机时是神技。

  • DUALPORT:使能双端口访问。这允许调试器在CPU 运行(running)的过程中,实时读取并刷新内存中的变量值(比如你看的全局变量或周期任务计数器,可以不用停下来,直接实时跳变)。

posted @ 2026-07-19 14:45  日暮_途远  阅读(4)  评论(0)    收藏  举报