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)的更多相关文章

  1. <<linux device driver,third edition>> Chapter 4:Debugging Techniques

    Debugging by Printing printk lets you classify messages accoring to their severity by associating di ...

  2. 在keil中使用printf()函数的要点

    在keil中printf默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化串口,否则可能引起死机的情况,并且在printf之前应该先将TI置位,摘抄原因如下: 1.printf函数是调用pu ...

  3. printf in KEIL C51

    转自:http://blog.csdn.net/it1988888/article/details/8821713 在keil中printf默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化 ...

  4. Keil C51 的printf

    转自:http://blog.csdn.net/zhanglianpin/article/details/44779009 在Keil C51 中使用printf ,首先需要重新实现 putchar( ...

  5. 使用printf函数实现串口信息打印——设置IAR和Keil的Options

    在Keil和IAR中都可以使用printf函数,但两者设置的方法不一样.以下分别是IAR和Keil的设置. 下面是Keil的设置. 选中Options--->Target--->Code ...

  6. AMD64 Instruction-Level Debugging With dbx

    http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation/amd64-dbx-364568.html A ...

  7. STM32F103C8T6最小板搞定CMSIS-DAP和SWO功能

    转载:http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=616081&extra=page%3D&am ...

  8. 初学单片机:Proteus介绍、Proteus与Keil联调(Windows10环境下)

    Proteus是一个仿真软件,可以在里面设计电路并模拟测试,也可生成PCB的布线等等,反正就是强大的不行.初学单片机,除了开发板,这个仿真器就是一个很好的调式环境.软件安装信息: Proteus 8. ...

  9. Named function expressions demystified

    Introduction Surprisingly, a topic of named function expressions doesn't seem to be covered well eno ...

随机推荐

  1. 第7月第12天 opengles background

    1. After your app exits its applicationDidEnterBackground: method, it must not make any new OpenGL E ...

  2. HDU 2073 无限的路 (模拟)

    题目链接 Problem Description 甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形: 甜甜的好朋友蜜蜜发现 ...

  3. JS异常简单处理

    有时候JS某一处报错会导致整个页面JS的运行出问题,于是想的简单研究一下JS的错误处理机制.更详细的可以自己参考网站研究:   https://developer.mozilla.org/zh-CN/ ...

  4. Ansible Tower系列 四(使用tower执行一个命令)【转】

    在主机清单页面中,选择一个主机清单,进入后,选择hosts里的主机 Paste_Image.png 点击 RUN COMMANDS MODULE 选择 commandARGUMENTS 填写 ifco ...

  5. 使用eclipse构建Maven项目及发布一个Maven项目

    开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集 ...

  6. 用Executors工具类创建线程池

    多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 线程池主要用来解决线程生命周期开销问题和资源不足问题.通过对多个任务重用线程,线程创建 ...

  7. java 编译与运行

    javac  编译 .java文件 javac file.java //将file.java 编译为 file.classjavac -d folder file.java //将file.java ...

  8. KnockoutJs学习笔记(七)

    if binding与visible binding类似.不同之处在于,包含visible binding的元素会在DOM中一直保存,并且该元素相应的data-bind属性会一直保持,visible ...

  9. 为什么要做A.prototype.constructor=A这样的修正?

    问题 虽然看过这篇博文JavaScript prototype之后对原型理解不再那么模糊了,但是依然还有很多理解不甚透彻的地方.比如,今天看到一个原型式继承的例子,又有些困惑,于是找了些帖子看看,有了 ...

  10. SRILM Ngram 折扣平滑算法

    关于n-gram 语言模型,大部分在这篇博客里 记过了,   SRILM 语言模型格式解读 , 其实看完了,ngram的大概用法都比较清楚了, 但是关于平滑算法,一直很模糊,就晓得一个"劫富 ...