TRACE32——AMP多核调试
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进行操作。还可以使用ALL、OTRHERS,来进行多个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.pdf 的Quick 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多核调试相关推荐
- TRACE32——SMP多核调试
TRACE32--SMP多核调试 很多时候我们需要调试SMP多核芯片,或者一个复杂的处理器里的SMP多核部分,例如英飞凌TC275TF有三个Tricore™ 内核.NXP S32G274A中含有四个C ...
- trace32专栏——基础调试
TRACE32是LAUTERBACH公司开发的在线调试工具,功能强大,可以做单步跟踪,设置断点等各种在线调试.一般大家对其习惯的称呼有:"trace32","T32&qu ...
- trace32专栏 | 基础调试
T32打开界面 首先需要安装,一般默认安装在C:\T32,在安装路径下T32/bin/windows64 下打开t32start.exe,如下,检查路径是否正确,检查core是否正确. 然后点击sta ...
- 劳特巴赫 Trace32 调试使用教程
文章目录 1. 打开trace32 2. 连接开发板 3. 下载代码到开发板 4. 多核调试 5. 复位 6. 调试 1. 查看代码当前运行位置 2. 模式选择 3. 函数查找 4. 函数跳转 5. ...
- TMS320多核 DSP 实时算法实现
特点 学习如何使用开发工具,利用该处理器的最大性能和功能 了解从架构.开发工具和编程模型(如 OpenCL 和 OpenMP)到调试工具的丰富内容 详细介绍了各种多核音频和图像应用 一套丰富的经过测试 ...
- NE问题分析方法 ---- Native栈还原和调试技巧
文章目录 简介 Native栈还原 调试技巧 简介 NE即Native Exception,我们主要指Android C/C++程序出现异常报错,因Camera HAL是由C/C++实现的,在相机系统 ...
- 用python计算邮费考虑是否加急_python多核计算的那些坑和计算效率考量
最近从处理股票日频.分钟频 转到处理tick级别数据,发现单核计算的能力已经跟不上现在的需求.转向在服务器上做并行计算.亲自捣鼓了一圈,总结一下碰到的各种坑,以及性能提升的一些关键点.大体上按照简单到 ...
- trace32仿真器入门介绍和使用教程
找到两个可以在线看完的资料记录如下: 一个不错的调试培训文档: https://download.csdn.net/download/wp_neu/7650633 在线可看: trace32仿真器使用 ...
- 端云一体人工智能开发平台整体架构
端云一体人工智能开发平台整体架构 引言 当前人工智能(Artificial Intelligence)技术发展迅猛,在机器视觉.语音识别以及自然语言处理等多个技术领域取得了卓越的进展,带来了更高的精确 ...
最新文章
- 2022-2028年中国塑料管的制造行业市场需求预测及投资策略研究报告
- 三次握手+四次挥手,一文搞定所有!历史最佳剖析!
- 【我解C语言面试题系列】003 死循环格式问题小结?
- c 连接mysql怎么增删改_C++ API方式连接mysql数据库实现增删改查
- 赢在中国 (2008-3-19)
- 极光推送 java 绑定别名_极光推送-别名篇
- 【java】简介(一)
- 有关试用Silverlight OOB模式遇到的一些问题
- 下一代操作系统与软件
- 基于java的教材管理_基于JAVA Web教材管理系统设计与实现.doc
- SOM网络(Kohonen自组织网络)学习第二篇
- 航班经停地查询api 航班经停地及起降时间查询
- 【深度学习之美】一入侯门“深”似海,深度学习深几许(入门系列之一)
- 将一个3*3的矩阵转置,用一个实现。在主函数中用scanf函数输入以下矩阵元素
- 读 Samuel Enoch Stumpf 之《西方哲学史》
- 施工控制网的精度确定方法?
- linux浏览器切换内核,电脑切换浏览器内核模式浏览网页的详细方法
- 能否构成三角形的条件代码_三角形基础知识
- GNSS观测值质量分析必备基础知识
- 天涯的炒作值得小站长学习
热门文章
- GNSS/GPS 精度(RMS,CEP,Sigma) 与精度因子(DOP)
- iOS开发之蓝牙4.0技术完美实现
- 蓝牙耳机什么品牌好?五款性价比高的无线蓝牙耳机品牌推荐
- 51单片机——USART全双工模式通讯-波特率可选1.3版本
- C#中的里氏替换原则
- 用cuda改写NLM算法,并列出代码
- 第十五届“中国电机工程学会杯”全国大学生电工数学建模竞赛
- Python爬取校花网,妈妈再也不会担心我不给她发女朋友照片了
- Android Binder通信原理(五):Java 端的service 注册和获取
- 2016阿里巴巴校园招聘测试开发工程师笔试附加题(含部分答案)