TRACE32——AMP多核调试

之前有一篇文章介绍过芯片的SMP多核调试,适用于同架构的内核运行同一套操作系统的场景。例如英飞凌的TC275TF芯片的三个TriCore核以SMP的方式运行着AutoSar操作系统。

但随着芯片的使用场景越来越复杂,芯片厂商推出的SoC可能会同时集成不同架构的内核用于不同的功能。

例如TI公司推出的TDA4VM芯片含有Cortex-M3、Cortex-R5、Cortex-A72、C66x DSP、C7x DSP等不同架构的内核。

不同架构的内核有不同的指令集、有不同的代码空间、运行不同的操作系统,所以也需要不同的TRACE32窗口(GUI)来进行调试。但此时TRACE32 GUI之间共享一个劳特巴赫设备以及一个JTAG调试接口:

传统方式调试AMP

如果是在Windows PC机上,我们可以使用TRACE32 Start程序进行配置AMP调试环境。根据需要调试的内核架构,添加相应的配置项即可。

配置好后,只需在Configuration名字处(图中是TDA4的位置)或者1:PodBus Device Chain处右键,点击Start,便会自动打开所有核的调试窗口。

关于TRACE32 Start的使用方法可以参考app_t32start.pdf

由于AMP多核调试时,可能会使用Trace(跟踪)功能,为了便于TRACE32更好地处理多核之间的Trace数据,建议在各个GUI中,执行如下命令

System.config

在每个GUI中修改此处的参数:

对于绝大部分情况,此处参数的配置原则为:

core:任意数字,各个GUI之间不重复即可。

推荐按窗口顺序填写:

即第一个GUI的值写1. 第二个GUI的值写2.以此类推

chip:各个GUI之间保持为相同值

推荐都写1.

有时候,AMP多核调试时,可能会希望主核开始运行时,其他从核也能同步运行起来。此时,可以执行Synch命令进行相应的同步配置:

注意:使用Synch功能的前提是,每个GUI都打开了InterCom Port。具体操作方法可以参考文档:

  • general_ref_s.pdf的Synch章节
  • ide_ref.pdf的InterCom章节

新方法调试AMP

如果在Linux PC上使用TRACE32,可能没有TRACE32 Start。因此TRACE32推出了更高效更通用的方法(需要2020年以后的TRACE32版本),主要为下面两个命令组

//用于打开新的GUI、查看已经打开的GUI
TargetSystem  //用于GUI之间的通信、跨GUI之间执行命令
InterCom

以TI芯片TDA4VM为例,AMP相关调试方法如下:

按照正常方式启动第一个TRACE32 GUI用于第一个内核/子系统的调试

例如,TDA4VM的MCU域的R5 SMP 多核子系统

在调试过程中,如果需要同时调试其他内核/子系统,可以使用这条命令再启一个TRACE32 GUI:

TargetSystem.NewInstance <新窗口名字> /ARCH <新窗口架构>
// 其中新窗口名字,可以任意取名
// 架构名可选的有:
// - ARM:所有ARM核
// - ARM64:2022年开始的TRACE32版本不区分ARM和ARM64,任选一个即可
// - Tricore: 英飞凌Tricore核
// - C6000
// - C7000
// - 等等,更多的架构可以在TRACE32命令行下方的提示栏中进行选取

例如希望调试TDA4VM MAIN0域的R5 SMP子系统,新打开的GUI调试的架构,和当前GUI调试的架构一样时,/ARCH参数可省略

// 新GUI名字任意选取,例如 main0TargetSystem.NewInstance main0

这条命令会:

  • 打开当前GUI的Intercom Port(如果未打开)
  • 克隆当前GUI使用的配置文件(config.t32)
  • 并将配置文件的Intercom Port加1后,供新打开的GUI使用

当然上面的操作是TRACE32底层自动做的,一般用户可以不用关心。只需要记住新打开的GUI的名字。

如果用户习惯使用用鼠标操作,可仍然按照以前的习惯,在新打开的GUI中:

  • 选择要调试的内核/芯片/子系统名字
  • 进行Attach操作,连上内核后开始调试

也有用户习惯使用CMM脚本操作TRACE32,通过这种方法调试AMP多核的优势是,可以使用一个CMM脚本,控制所有多核窗口。示意图如下:

单个CMM脚本能够控制所有窗口的操作,主要用了如下命令:

Intercom.execute <窗口名字> <命令>
//命令可简写成如下格式
IC <窗口名字> <命令>

本例子中,我们的脚本可以这样写:

//第一个GUI:MCU-R5
System.cpu TDA4VM-CR5-MCU
core.assign 1,2  //MCU域是一个R5 SMP子系统
System.attach
Break
List /core 0
List /core 1//*******打开第二个GUI:MAIN0-R5**********
TargetSystem.NewInstance main0
IC main0 System.cpu TDA4VM-CR5-MAIN0
IC main0 System.CONFIG.CORE 2. 1.
IC main0 core.assign 1,2  //MAIN0域是一个R5 SMP子系统
IC main0 System.attach
IC main0 Break
IC main0 List /core 0
IC main0 List /core 1

同理,我们也可以用类似的方法,打开其他核的调试窗口,例如TDAVM芯片中的DSP C66x

当打开的GUI比较多后,除了可以使用*IC <窗口名字> <命令>*的方法来对指定GUI进行操作。还可以使用ALLOTRHERS,来进行多个GUI的同时操作:

//对所有已经打开的GUI,执行命令
IC ALL <命令>//除了当前GUI,对其他所有窗口执行命令
IC OTHERS <命令>

命令示意图如下:

IC ALL Go

IC Others Go

综合更多的内核和命令,CMM脚本功能更新如下:

//script.cmm 在第一个GUI中执行
//第一个GUI:MCU-R5
System.cpu TDA4VM-CR5-MCU
core.assign 1,2  //MCU域是一个R5 SMP子系统
System.attach
Break
List /core 0
List /core 1//打开第二个GUI:MAIN0-R5
TargetSystem.NewInstance main0
IC main0 System.cpu TDA4VM-CR5-MAIN0
IC main0 System.CONFIG.CORE 2. 1.
IC main0 core.assign 1,2  //MAIN0域是一个R5 SMP子系统
IC main0 System.attach
IC main0 Break
IC main0 List /core 0
IC main0 List /core 1//打开第三个GUI:C66X
TargetSystem.NewInstance c66x
IC c66x System.cpu TDA4VM-C66X
IC c66x System.CONFIG.CORE 3. 1.
IC c66x System.attach
IC c66x Break
IC c66x List//多个GUI之间的同步控制
Go Os_Init //控制MCU-R5运行到断点处
Wait !RUN()
IC All Go //控制所有GUI一起运行程序
wait 5.s
IC Others BreakENDDO

回顾下整个AMP多核调试环境,其中包含了若干个SMP多核子系统。使用一个CMM脚本进行调试,操作和维护都更方便。

也可以执行如下命令后查看当前AMP多核调试环境中,各个GUI以及各个Core的状态:

TargetSystem All

关于TargetSystem命令的更多介绍可以参考:

  • general_ref_t.pdf的 TargetSystem章节

多核调试更多参考信息

  • 文档:

debugger_.pdf 中的多核调试章节

例如 debugger_armv8v9.pdfQuick Start for Multicore Debugging

  • 脚本:

demo\<arch>\hardware\文件夹下提供了一些常见的开发板可用的多核调试参考脚本

例如\demo\arm\hardware\s32g2\s32g-vnp-evb\s32g-vnp-evb-m7-a53-amp\s32g-vnp-evb_amp_sram.cmm

TRACE32——AMP多核调试相关推荐

  1. TRACE32——SMP多核调试

    TRACE32--SMP多核调试 很多时候我们需要调试SMP多核芯片,或者一个复杂的处理器里的SMP多核部分,例如英飞凌TC275TF有三个Tricore™ 内核.NXP S32G274A中含有四个C ...

  2. trace32专栏——基础调试

    TRACE32是LAUTERBACH公司开发的在线调试工具,功能强大,可以做单步跟踪,设置断点等各种在线调试.一般大家对其习惯的称呼有:"trace32","T32&qu ...

  3. trace32专栏 | 基础调试

    T32打开界面 首先需要安装,一般默认安装在C:\T32,在安装路径下T32/bin/windows64 下打开t32start.exe,如下,检查路径是否正确,检查core是否正确. 然后点击sta ...

  4. 劳特巴赫 Trace32 调试使用教程

    文章目录 1. 打开trace32 2. 连接开发板 3. 下载代码到开发板 4. 多核调试 5. 复位 6. 调试 1. 查看代码当前运行位置 2. 模式选择 3. 函数查找 4. 函数跳转 5. ...

  5. TMS320多核 DSP 实时算法实现

    特点 学习如何使用开发工具,利用该处理器的最大性能和功能 了解从架构.开发工具和编程模型(如 OpenCL 和 OpenMP)到调试工具的丰富内容 详细介绍了各种多核音频和图像应用 一套丰富的经过测试 ...

  6. NE问题分析方法 ---- Native栈还原和调试技巧

    文章目录 简介 Native栈还原 调试技巧 简介 NE即Native Exception,我们主要指Android C/C++程序出现异常报错,因Camera HAL是由C/C++实现的,在相机系统 ...

  7. 用python计算邮费考虑是否加急_python多核计算的那些坑和计算效率考量

    最近从处理股票日频.分钟频 转到处理tick级别数据,发现单核计算的能力已经跟不上现在的需求.转向在服务器上做并行计算.亲自捣鼓了一圈,总结一下碰到的各种坑,以及性能提升的一些关键点.大体上按照简单到 ...

  8. trace32仿真器入门介绍和使用教程

    找到两个可以在线看完的资料记录如下: 一个不错的调试培训文档: https://download.csdn.net/download/wp_neu/7650633 在线可看: trace32仿真器使用 ...

  9. 端云一体人工智能开发平台整体架构

    端云一体人工智能开发平台整体架构 引言 当前人工智能(Artificial Intelligence)技术发展迅猛,在机器视觉.语音识别以及自然语言处理等多个技术领域取得了卓越的进展,带来了更高的精确 ...

最新文章

  1. 2022-2028年中国塑料管的制造行业市场需求预测及投资策略研究报告
  2. 三次握手+四次挥手,一文搞定所有!历史最佳剖析!
  3. 【我解C语言面试题系列】003 死循环格式问题小结?
  4. c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查
  5. 赢在中国 (2008-3-19)
  6. 极光推送 java 绑定别名_极光推送-别名篇
  7. 【java】简介(一)
  8. 有关试用Silverlight OOB模式遇到的一些问题
  9. 下一代操作系统与软件
  10. 基于java的教材管理_基于JAVA Web教材管理系统设计与实现.doc
  11. SOM网络(Kohonen自组织网络)学习第二篇
  12. 航班经停地查询api 航班经停地及起降时间查询
  13. 【深度学习之美】一入侯门“深”似海,深度学习深几许(入门系列之一)
  14. 将一个3*3的矩阵转置,用一个实现。在主函数中用scanf函数输入以下矩阵元素
  15. 读 Samuel Enoch Stumpf 之《西方哲学史》
  16. 施工控制网的精度确定方法?
  17. linux浏览器切换内核,电脑切换浏览器内核模式浏览网页的详细方法
  18. 能否构成三角形的条件代码_三角形基础知识
  19. GNSS观测值质量分析必备基础知识
  20. 天涯的炒作值得小站长学习

热门文章

  1. GNSS/GPS 精度(RMS,CEP,Sigma) 与精度因子(DOP)
  2. iOS开发之蓝牙4.0技术完美实现
  3. 蓝牙耳机什么品牌好?五款性价比高的无线蓝牙耳机品牌推荐
  4. 51单片机——USART全双工模式通讯-波特率可选1.3版本
  5. C#中的里氏替换原则
  6. 用cuda改写NLM算法,并列出代码
  7. 第十五届“中国电机工程学会杯”全国大学生电工数学建模竞赛
  8. Python爬取校花网,妈妈再也不会担心我不给她发女朋友照片了
  9. Android Binder通信原理(五):Java 端的service 注册和获取
  10. 2016阿里巴巴校园招聘测试开发工程师笔试附加题(含部分答案)