【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】

news2024/11/16 0:55:09

文章目录

    • 1.1 ITM 介绍
      • 1.1.1 ITM 功能介绍
      • 1.1.2 Cortex-M ITM 的地址范围
    • 1.2 ITM 使用
      • 1.2.1 ITM 寄存器介绍
      • 1.2.2 Cortex-M7 ITM 代码示例
      • 1.2.3 Cortex-M33 ITM 代码示例

1.1 ITM 介绍

在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如果SoC 中没有集成uart 或者 集成uart 不能使用了,那么软降如何将 log 输出出来呢?这个时候就可以通过 ARM coresight 中带的 ITM (仪器化跟踪宏单元) 模块了,它可比UART专业多了——速度快而且能提供多条信道。通过把数据写到 ITM 的寄存器中,调试器能够通过跟踪接口来收集这些数据,并且显示或者处理它。此法不但容易使用,而且比 JTAG 的输出速度更快。

ITM 主要用于 Cortex-M 系列,如 Cortex-M3/M7/M33 等,当然 Cortex-A 系列中也有类似 ITM 组件的组件,它就是 STM,STM的功能比 ITM 更强大,详细内容见 STM 的系列文章:
ARM Coresight 系列文章 10 - ARM Coresight STM 介绍及使用
ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用
ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets
ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介绍 及STM DMA 传输介绍

1.1.1 ITM 功能介绍

ITM 有如下的功能:

  • 软件可以直接把控制台消息写到 ITM stimulus 端口,从而把它们输出成跟踪数据;
  • DWT 可以产生跟踪数据包,并通过 ITM 把它们输出;
  • ITM 可以产生时间戳数据包并插入到跟踪数据流中,用于帮助调试器求出各事件的发生时间。

因为 ITM 要使用跟踪端口来输出数据,所以芯片上必须有 TPIU 单元,否则无法输出——在使用 ITM 前要确认此事。

以 Cortex-M3为例, 处理器里面除了处理核心外,还有了其它组件,其中就包含ITM模块,如下图:
在这里插入图片描述
总线 对 ITM 的访问
还是以Cortex-M3为例,它私有外设总线有两条:AHB 私有外设总线APB 私有外设总线,其中 AHB 只用于 Coretex-M3 内部的 AHB 外设,如上图黑粗线连接所示,它们是: NVIC, FPB, DWT 和 ITM

软件可以控制该模块通过高级跟踪总线(ATB)把来自ITM 的跟踪数据输出到TPIU(类似 printf 风格的调试);还可以让 DWT 匹配命中事件通过 ITM 产生数据跟踪包,并把它输出到一个跟踪数据流中。

1.1.2 Cortex-M ITM 的地址范围

cortex-m 地址范围 用户级许可权限
Cortex-M3 ITM E000_0000 – E000_0FFF 可以读。对于写操作,除了用户级下允许时的 stimulus 端口外,全部忽略
Cortex-M7 ITM E000_0000 – E000_0FFF
Cortex-M33 ITM E000_0000 – E000_0FFF

1.2 ITM 使用

使用 ITM 之前需要注意以下几点:

  • 必须把 DEMCR.TRCENA 位置位,跟踪系统使能位,在使用 DWT, ETM, ITM 和 TPIU 前,必须先设置此位否则 ITM 处于除能状态,无法使用。
  • 在 ITM 寄存器中还有一个锁。在编程 ITM 之前,必须写入一个访问钥匙值 0xC5AC_CE55(CoreSight 的 ACCESS)到这个解锁寄存器 ITM_LAR 中,M33 中已经去掉这个寄存器了。否则,所有对 ITM 寄存器的写操作都被忽略。
  • ITM 自己也是另一个控制寄存器(可能是说控制寄存器的名字也是“ITM”吧),用于控制对各功能的独立使能。控制寄存器中含了 ATID 位段,作为 ITM 在 ATB 中的 ID 值。这个 ID 必须是唯一的——每个跟踪源都必须有唯一的 ID 值,从而使调试主机能从接收到的跟踪数据包中分离出各跟踪源的数据。

DEMCR 是NVIC 调试异常及监视器控制寄存器

1.2.1 ITM 寄存器介绍

Cortex-M33 ITM 为例:
在这里插入图片描述在这里插入图片描述

1.2.2 Cortex-M7 ITM 代码示例

当时在对ITM测试的时候使用 ITM port0,所以下面测试代码也是使用 ITM 的port 口输出 log,代码如下,测试时直接调用函数 swo_test_itm 即可。

#include <rtthread.h>

/* Memory mapping of Core Hardware */
#define ITM_BASE            (0xE0000000UL)                            /*!< ITM Base Address */
#define DWT_BASE            (0xE0001000UL)                            /*!< DWT Base Address */
#define CoreDebug_BASE      (0xE000EDF0UL)                            /*!< Core Debug Base Address */

#define I

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用丨高光谱数据预处理-机器学习-深度学习-图像分类-参数回归等12个专题

目录 第一章 高光谱数据处理基础 第二章 高光谱开发基础&#xff08;Python&#xff09; 第三章 高光谱机器学习技术&#xff08;python&#xff09; 第四章 典型案例操作实践 更多应用 本教程提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 涵盖高光谱遥感…

C++ Primer (第五版)-第十二章 动态内存

文章目录 序言12.1 动态内存和智能指针shared_ptr类make_shared函数shared_ptr的拷贝和赋值shared_ptr 自动销毁所管理的对象shared_ptr 还会自动释放相关联的内存定义 StrBlob类直接管理内存指针值和delete动态对象的生存期在知道被释放时为止shared_ptr和new结合使用不要混合…

AD7606模块

了解一下ad7606模块,并学习制作一个。 认识AD7606 先了解一下关元AD7606的信息。&#xff08;芯片手册的内容&#xff09; AD7606 采用 5V 单电源供电&#xff0c;不再需要正负 双电源&#xff0c;并支持真正10V 或5V 的双极性信号输。所有的通道均能以高达 200 kSPS 的速率进…

JVM第二讲:JVM 基础 - 字节码详解

JVM 基础 - 字节码详解 本文是JVM第二讲&#xff0c;JVM 基础-字节码详解。源代码通过编译器编译为字节码&#xff0c;再通过类加载子系统进行加载到JVM中运行。 文章目录 JVM 基础 - 字节码详解1、多语言编译为字节码在JVM运行2、Java字节码文件2.1、Class文件的结构属性2.2、…

基于保密信息学科平台系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 教师信息管理 学科动态管理 文献资源管理 征订目录管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…

注解和依赖注入框架

依赖注入是一种比较流行的设计模式&#xff0c;在 Android 开发中有很多实用的依赖注入框架&#xff0c;可以帮助开发人员少些样板代码&#xff0c;达到各个类之间解耦的目的。 1 注解 从 JDK 5 开始&#xff0c;Java 增加了注解&#xff08;Annotation&#xff09;&#xff…

Maven系列第2篇:安装、配置、mvn运行过程详解

maven系列目标&#xff1a;从入门开始开始掌握一个高级开发所需要的maven技能。 这是maven系列第2篇。 本文主要内容 linux中安装maven window中安装maven mvn命令运行的原理 maven配置设置 本篇环境 jdk1.8 maven3.6.2 我们要写java代码&#xff0c;需要安装jdk&…

Zend Framework 3.1.3 gadget chain

前言 在推特上的PT SWARM账号发布了一条消息。 一个名为Zend Framework的php框架出现了新的gadget chain&#xff0c;可导致RCE。笔者尝试复现&#xff0c;但失败了。所幸&#xff0c;我基于此链&#xff0c;发现在这个框架的最新版本中的另一条链。 复现过程 这里使用vscod…

利达卓越:关注环保事业,持续赋能科技

随着全球环境问题的日益突出,绿色金融作为一种新兴的金融模式逐渐受到各国的重视。绿色金融是指在金融活动中,通过资金、信贷和风险管理等手段,支持环境友好和可持续发展的项目和产业。绿色金融的出现是为了应对气候变化、资源短缺、污染问题等现实挑战,促进经济的绿色转型和可…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化教程

详情点击公众号链接&#xff1a;【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化教程 第一&#xff1a;基础 1、Earth Engine平台及应用、主要数据资源 2、Earth Engine遥感云重要概念、数据类型与对象等 3、JavaScript与Python遥感云编程比较与选择 4、…

南美哥伦比亚市场最全分析开发攻略,收藏一篇就够了

哥伦比亚作为南美洲最大的经济体之一&#xff0c;其外贸市场潜力巨大&#xff0c;吸引了越来越多的国际企业寻求商机。哥伦比亚跟中国的贸易往来也是非常的密切&#xff0c;今天就来分享一下如何开发南美比较重要的国家哥伦比亚&#xff0c;文章略长&#xff0c;建议大家点赞收…

【RocketMQ】(十一)Dledger模式下的日志复制

RocketMQ在开启Dledger时&#xff0c;使用DLedgerCommitLog&#xff0c;其他情况使用的是CommitLog来管理消息的存储。在Dledger模式下&#xff0c;消息写入时Leader节点还需要将消息转发给Follower节点&#xff0c;有过半的节点响应成功&#xff0c;消息才算写入成功。 Leade…

spring学习小笔记

spring学习小笔记&#xff08;1&#xff09; 一、Spring开发1.1 Spring简介1.2 Spring Framework系统架构1.3 Spring Framework学习路线1.4 Spring Farmework核心概念1.5 Spring入门 二、Bean的基础配置2.1 Bean的别名配置2.2 Bean的作用范围2.3 Bean的实例化2.3.1 构造方法实例…

本地vscode安装GPU版本PyTorch

操作系统 windows, IDE环境vscode&#xff0c;本地GPU 可以新建一个jupyter文件&#xff0c;运行一些测试代码 确保装好显卡驱动 在底下调出终端窗口&#xff0c;默认是power shell&#xff0c;我喜欢用cmd窗口 激活自己的虚拟环境&#xff0c;输入命令 nvidia-smi 确保自己…

ctfshow-web12(glob绕过)

打开链接&#xff0c;在网页源码里找到提示 要求以get请求方式给cmd传入参数 尝试直接调用系统命令&#xff0c;没有回显&#xff0c;可能被过滤了 测试phpinfo&#xff0c;回显成功&#xff0c;确实存在了代码执行 接下来我们尝试读取一下它存在的文件&#xff0c;这里主要介…

E. Li Hua and Array

Problem - E - Codeforces 思路&#xff1a;观察给定的函数&#xff0c;其实就是求与这个数互质的数的个数&#xff0c;即欧拉函数&#xff0c;我们发现一个数迭代欧拉函数不会很多&#xff0c;那么对于第一个操作来说我们可以直接暴力修改&#xff0c;而对于第二个操作来说&am…

软件测试/测试开发丨为什么接口自动化测试是提升职业技能的关键?

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…

ElementPlus Switch 开关基础使用

昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …

C#,工业化软件与院校软件的对比及编程语言的选择建议

飞机发动之之一&#xff0c;涡轮喷气航空发动机&#xff08;JET ENGINE&#xff09; 火箭发动机之一&#xff0c;俄罗斯RD-180煤油和液氧发动机&#xff08;ROCKET ENGINE&#xff09; 1 飞机发动机与火箭发动机的简明对比 2 工业软件与院校软件的简单对比 除了以上类似的对比…

【java学习】方法的参数传递(21)

文章目录 相关概念1. 方法传递之基本数据类型2. 方法的参数传递之引用对象3. 总结 相关概念 方法&#xff0c;必须有其所在类或对象调用才有意义。若方法含有参数&#xff1a; 形参&#xff1a;方法声明时的参数 实参&#xff1a;方法调用时实际传给形参的参数值 问题&#xf…