Arm Community
Site
Search
User
Site
Search
User
Groups
Education Hub
Distinguished Ambassadors
Open Source Software and Platforms
Research Collaboration and Enablement
Forums
AI and ML forum
Architectures and Processors forum
Arm Development Platforms forum
Arm Development Studio forum
Arm Virtual Hardware forum
Automotive forum
Compilers and Libraries forum
Graphics, Gaming, and VR forum
High Performance Computing (HPC) forum
Infrastructure Solutions forum
Internet of Things (IoT) forum
Keil forum
Morello forum
Operating Systems forum
SoC Design and Simulation forum
SystemReady Forum
Blogs
AI and ML blog
Announcements
Architectures and Processors blog
Automotive blog
Graphics, Gaming, and VR blog
High Performance Computing (HPC) blog
Infrastructure Solutions blog
Internet of Things (IoT) blog
Operating Systems blog
SoC Design and Simulation blog
Tools, Software and IDEs blog
Support
Arm Support Services
Documentation
Downloads
Training
Arm Approved program
Arm Design Reviews
Community Help
More
Cancel
Community Management
Archive
中文社区
Jump...
Cancel
中文社区
中文社区博客
使用Fast Model的ITM功能trace Cortex-M 软件
Blogs
视频和文件
Members
Mentions
Sub-Groups
Tags
Jump...
Cancel
New
中文社区 requires membership for participation - click to join
More blogs in 中文社区
ARM中国大学计划博客
Arm新闻
中文mbed博客
中文社区博客
恩智浦汽车电子MCU讨论区博客
Tags
itm
Trace macrocells
Fast Models
Cortex-M
Actions
RSS
More
Cancel
Related blog posts
Related forum threads
使用Fast Model的ITM功能trace Cortex-M 软件
feng
November 22, 2017
Less than one minute read time.
原文地址:
https://community.arm.com/tools/b/blog/posts/trace-cortex-m-software-with-the-instruction-trace-macrocell-itm
ARM Fast model 最近release的版本中HighLight了这样一条Feature:ITM support added to Cortex-M Fast Models。本文帮助你更好的理解这个feature的作用并带你如何实际使用它。
ITM通常用来方便应用程序和操作系统的打印printf()输出及事件记录。Fast Model系统一般使用Semihost或者UART模型来提供软件运行时的字符与文件I/O功能。从Fast Model11.1版本开始,Cortex-M的Fast Model提供了使用ITM(Instrumentation Trace Macrocell )进行打印输出和事件记录的选项。从而使得模型与硬件上的软件开发等效。
ITM 好处
Fast Model支持ITM的最大好处是使得虚拟原型上运行的软件镜像与FPGA原型完全一致。在Cortex-M项目中,软件工程师经常在模型与开发板之间来回切换,使用相同的软件大大降低了平台切换的复杂度及时间成本。因为基于目标板的源代码修改相关的额外维护成本,对开发者而言并不希望看到。
使用ITM同时也比用一个UART要快,因为在Cortex-M处理器里,写ITM相当于一个32位的内部寄存器写操作。而配置UART则需要额外的总线时间且对系统性能影响更多。这个在Fast Model上影响并不大,因为Fast Model提供功能软件执行不提供周期级的时序细节。类似的,Semihosting在模型上也可以很好工作,但在FPGA目标板上却要慢,因为CPU执行semihosting操作时会因为数据传输而停下来。Semihosting同时也依赖工具链,不同的debugger和compiler的程序也不同。
使用ITM对不用标准C函数库的Cortex-M软件用户来说更有利。很多工程有存储限制且为了完全可控要求所有代码从头写起。这种情况下,实现Semihosting因为对标准C库的依赖而需要花费更大精力。
有些Cortex-M系统也没有UART,但依然可以使用ITM来实现printf()输出。
Keil MDK
用户非常习惯uVision中使用
Debug Viewer
方便的访问ITM。现在同样的软件可以在Fast Model上运行。下面我们看一个Cortex-M4的例子。
Cortex-M4 Fast Model例子中使用ITM
Fast Model上使用MTI的两项准备工作:
第一,模型参数TRACE_LVL要设置成true。这个参数默认值就是true,
Fast Model reference Manual
提供了这些参数的详细信息。
第二,需要一个
model trace interface
(MTI )plugin来获取ITM包。Fast Model上使用ITM需要一个Plugin,类似硬件里使用串行输出serial wire output (SWO)来发送信息包。
MTI Plugin基于C++创建,在Fast Model示例目录下的MTI文件夹提供了参考例子。本文演示一个使用MTI的plugin,同时提供参考代码以供修改。这里使用一个基于Cortex-M4的最小系统,示例运行在Ubuntu 16.04使用GNU gcc5.4做为C++编译器。不过也可以在任何Fast Model支持的平台和编译环境运行。
上述最小系统的LISA代码如下。要创建工程,可以在Fast Model canvas(sgcanvas)中使用File -> New Project再用如下代码存为.lisa文件来创建。
点击Build按钮编译完例子系统后,再使用“
list trace sources
” plugin来运行isim_system可执行程序,同时将输出重定向到一个文件来检查所有可trace的资源:
打开得到的trace资源文件,查找ITM。Trace资源数量巨大,ITM只是Cortex-M4模型trace资源的一部分。
ITM_PACKET_TYPE是ITM用于printf()功能的资源。一个source trace package的PACKET_HEADER格式如下。 关于包格式的完整信息请参考
CoreSight technical reference manual
。
PACKET_PAYLOAD包含被写进ITM port的数据。对于message而言,就会被打印为字符或者软件想要传送的其他格式。
本文附带了一个用于ITM的参考MTI plugin,是基于$PVLIB_HOME/examples/MTI/SimpleTrace plugin的PC trace plugin修改而来。同时附带的Makefile和Visual Studio工程文件用于编译示例plugin。
示例ITM trace plugin加入了一个名为trace-file的参数用来表示获取的ITM输出文本文件的基准名称。文本文件基于每个激励端口创建,每个端口输出会生成一个不同文件。默认只是输出到stdout。对于使用单一激励端口的printf()类型足够了。
Plugin编译准备好后,便可以使用到例子系统中。想要看到基于plugin的任何ITM行为,还需要相应的使用了ITM的软件应用。
示例软件
使用ITM的软件程序,创建方式有很多种,最简单的一种是使用标准C函数库直接将printf()重定向到ITM。这跟将输出重定位到UART的方式类似。这里使用ARM编译器为例,具体步骤如下:
使用编译器pragma关闭使能Semihosting
实现一个定制的fputc()函数将字符从printf()传至ITM
首次调用printf()之前配置使能ITM
ITM寄存器的编程模型可以在每个Cortex-M技术参考文档中找到。
ARMv6-M
与
ARMv7-M
文档也提供了ITM的额外有用信息。
fputc()实现代码如下:
下面代码配置与使能ITM,并在首次调用printf()前调用call ITM_init()。
完整应用程序包括在文末附件中。
应用程序运行在Fast Model系统并加入ITM trace plugin时,printf()输出会出现在stdout。表面上看,跟semihosting毫无差别,但其实使用的是Fast Model ITM的功能。
总结
从Fast Model11.1版本开始,Cortex-M Fast Model提供了对ITM的支持,从而使得在模型与硬件FPGA甚至硅片上的软件开发等效。嵌入式软件工程师可以得益于这种新的模型技术,在不同目标系统上使用同样的软件镜像。这使得模型与开发板间的切换更容易,从而最大限度的提高效率和灵活性。
如果你还没用过Fast Model做软件开发,请点击
按钮
申请评估。
cortex-m4-itm-example.tar.gz
zhyihui2100
over 3 years ago
请问既然能用 printf 函数通过itm 发送调试信息,能否用scanf 通过itm 接收信息,并根据接收的信息执行不同的功能?谢谢!
Cancel
Up
0
Down
Reply
More
Cancel
中文社区博客
Arm A-Profile构架2022扩展
Zenon Xiu (修志龙)
原文:
Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community
作者:Martin Weidmann翻译:修志龙(Zenon Xiu) 与arm构架授权和生态伙伴一起,arm持续演进其构架,开发新功能以满足现有和新市场的要求…
October 17, 2022
深入理解 Arm A-profile的non-maskable interrupt -NMI
Zenon Xiu (修志龙)
原文:
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/a-profile-non-maskable-interrupts
翻译: 修志龙 Zenon Xiu Arm A-profile构架一个长久以来的局限性是:缺乏对non-maskable interrupt (NMI…
August 24, 2022
Arm A-Profile 构架2021扩展
Zenon Xiu (修志龙)
原文:
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-a-profile-architecture-developments-2021
Martin Weidmann
September 8, 2021 翻译注释:Zenon Xiu Arm与arm构架授权公司及生态伙伴一起…
August 17, 2022