Keil debugging techniques and alternative printf (SWO function)
One of the basic needs of the embedded software development through the terminal to output debugging information, generally two ways to achieve:
one is the COM port on the UART and PC using a serial cable connecting plate through the PC HyperTerminal to view the debugging information;
Another mechanism is the use of semi-host, but it may not be used in tool chain support.
Cortex-M3 core-based software debug break this limit, the Cortex-M3 core provides
a ITM (Instrumentation TraceMacrocell) interface debugging theITM data received by the SWO pin SWV (Serial Wire Viewer).
ITM 32 common data channel, based on the implementation the CMSIS requirements as the debugging output terminal to output debugging information,
channel 31 for the operating system (privileged mode access) channel 0.
In core_cm3 h the defined ITM_SendChar () function by calling the function to rewrite fputc print debugging information in the application by printf,
these debugging information can be viewed by the ITM Viewer.
With this implementation, embedded software developers can not configure the serial port
and use the terminal debugging software output debugging information to some extent reduce the workload.
Basic concepts:
SWD
The J-Link and J-Trace support ARMs Serial WireDebug (SWD).
SWD replaces the 5-pin JTAG port with a clock (SWDCLK) and a single bi-directional data pin (SWDIO),
providing all thenormal JTAG debug and testfunctionality.
Pin 13 of SWD:
SWO - Serial Wire Output trace port. (Optional, not required for SWD communication.)
SWO
J-Link can be used with devices that supportSerial Wire Output (SWO).
Serial Wire Output (SWO) support meanssupport for a single pin output signal from the core. It iscurrently tested with Cortex-M3 only.
SWV
The Instrumentation Trace Macrocell (ITM) andSerial Wire Output (SWO) can be used to form a Serial Wire Viewer (SWV).
The Serial Wire Viewer provides a low cost method ofobtaining information from inside the MCU.
The SWO can output tracedata in two output formats, but only one output mechanism is validat any one time.
The 2 defined encodings are UART and Manchester.
The current J-Link implementation only supports UART encoding.
Serial Wire Viewer uses the SWO pin to transmit different packetsfor different types of information.
The three sources in theCortex-M3 core which can output information via this pinare:
- Instrumentation Trace Macrocell (ITM) forapplication-driven trace source that supports printf-styledebugging.
It supports 32 different channels, which allow it to beused for other purposes such as real-time kernel information aswell.
- Data Watchpoint and Trace (DWT) for real-timevariable monitoring and PC-sampling,
which can in turn be used toperiodically output the PC or various CPU-internal counters,
whichcan be used to obtain profiling information from thetarget.
- Timestamping. Timestamps are emitted relative topackets.
Debug (printf) Viewer
Home »?Vision Windows >> Debug (printf) Viewer
The Debug (printf) Viewer window displays data streams that are transmitted sequentially through the ITM Stimulus Port 0. Enable ITM Stimulus Port 0.
Debug Viewer window
To use the Debug (printf) Viewer for tracing:
1. Add ITM Port register definitions to your source code.
# Define ITM_Port8 (n) (* ((volatile unsigned char *) (0xE0000000 + * n)))
# Define ITM_Port16 (n) (* ((volatile unsigned short *) (0xE0000000 + * n)))
# Define ITM_Port32 (n) (* ((volatile unsigned long *) (0xE0000000 + * n))) # Define DEMCR (* ((volatile unsigned long *) (0xE000EDFC)))
# Define TRCENA 0x01000000
2. Add an fputc function to your source code that writes to the ITM Port 0 register. The fputc function enables printf to output messages.
struct __ FILE
{ int handle; / * Add whatever you need here * /};
FILE __ stdout;
FILE __ stdin; int fputc( int ch, FILE * f )
{
if ( DEMCR & TRCENA )
{
the
while ( ITM_Port32( ) == )
;
ITM_Port8( ) = CH;
}
return ( ch );
}
3.Add your debugging trace messages to your source code using printf.
printf ("AD value = 0x% 04X \ r \ n", AD_value);
4.Set the ITM Port 0 to capture the information. Clear the Port 7 .. 0 privilege bit to access ITM Port 0 from User mode.
ITM Stimulus Port 0
Open the View - Serial Windows - Debug (printf) Viewer window.
Note
ITM Stimulus Ports can be monitored in the Instruction Trace Window, where ITM Port 0 is shown as well.
Consult Configure Cortex-M Target of the MDK-Primer for information on how to retarget the output.
Keil debugging techniques and alternative printf (SWO function)的更多相关文章
- <<linux device driver,third edition>> Chapter 4:Debugging Techniques
Debugging by Printing printk lets you classify messages accoring to their severity by associating di ...
- 在keil中使用printf()函数的要点
在keil中printf默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化串口,否则可能引起死机的情况,并且在printf之前应该先将TI置位,摘抄原因如下: 1.printf函数是调用pu ...
- printf in KEIL C51
转自:http://blog.csdn.net/it1988888/article/details/8821713 在keil中printf默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化 ...
- Keil C51 的printf
转自:http://blog.csdn.net/zhanglianpin/article/details/44779009 在Keil C51 中使用printf ,首先需要重新实现 putchar( ...
- 使用printf函数实现串口信息打印——设置IAR和Keil的Options
在Keil和IAR中都可以使用printf函数,但两者设置的方法不一样.以下分别是IAR和Keil的设置. 下面是Keil的设置. 选中Options--->Target--->Code ...
- AMD64 Instruction-Level Debugging With dbx
http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation/amd64-dbx-364568.html A ...
- STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能
转载:http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=616081&extra=page%3D&am ...
- 初学单片机:Proteus介绍、Proteus与Keil联调(Windows10环境下)
Proteus是一个仿真软件,可以在里面设计电路并模拟测试,也可生成PCB的布线等等,反正就是强大的不行.初学单片机,除了开发板,这个仿真器就是一个很好的调式环境.软件安装信息: Proteus 8. ...
- Named function expressions demystified
Introduction Surprisingly, a topic of named function expressions doesn't seem to be covered well eno ...
随机推荐
- Linux - awk 文本处理工具五
awk 线上处理常用模式 awk 处理复杂日志 6.19: DHB_014_号百总机服务业务日报:广州 到达数异常! DHB_023_号百漏话提醒日报:珠海 到达数异常! 6.20: DHB_014_ ...
- 矩阵乘法优化DP
本文讲一下一些基本的矩阵优化DP的方法技巧. 定义三个矩阵A,B,C,其中行和列分别为$m\times n,n \times p,m\times p$,(其中行是从上往下数的,列是从左往右数的) $C ...
- [HAOI2008]移动玩具(状压&带权二分图)
题目描述 • 一个 4 × 4 的 0/1 矩阵 • 每次可以交换相邻两个元素 • 求从初始状态到目标状态的最小交换次数 输入格式 前四行,每行一个长为 4 的 0/1 字符串,描述初始状态. 后四行 ...
- Hive笔记之Fetch Task
在使用Hive的时候,有时候只是想取表中某个分区的前几条的记录看下数据格式,比如一个很常用的查询: select * from foo where partition_column=bar limit ...
- 转载 你不知道的super
http://funhacks.net/2016/11/09/super/ super仅被用于新式类 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能 ...
- tomcat报错catalina.sh: line 401: /usr/java/jdk1.7.52/bin/java: No such file or directory
将生产服务器的Tomcat目录打包过来后解压后,启动Tomcat后,发现如下问题: # ./shutdown.sh Using CATALINA_BASE: /usr/local/tomcat ...
- selenium玩转svg操作
今天写脚本发现页面有svg结构,里面的元素无法定位,查找很多资料,然后就记录下来 初步尝试直接在页面中获取svg中包含元素的xpath,直接利用selenium方法访问,无法捕获到相关元素信息. SV ...
- andriod 自定义来电界面功能
由于近期所做一个项目需要做类似于“来电秀”的功能,所以上网搜索了一些相关资料,加上自己的一些想法,做了一个Demo.一下是我对该功能实现的一些想法,不对的地方欢迎各位指出.最后我会给出Demo 的源代 ...
- window BIOS设置硬盘启动模式
bios如何设置硬盘启动模式?BIOSD硬盘模试主是要针对IDE接口的硬盘和SATA接口的硬盘来设置的.以前的主板只支持一种类型.现在的智能笔记本主板支持:IDE Mode.AHCI Mode.下 ...
- 使用JS实现俄罗斯方块游戏
简单的JS俄罗斯方块游戏源码 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta charset=&q ...