
![]() 1 K$ k, V' E' e1 B9 ^" r0 T9 J) c 本文描述了如何配置和使用SW接口来获取各种调试信息。 8 D" r( b* f# }% \ 一、目标调试阶段的配置8 E0 @3 h5 X+ _' k9 S: @ + t' j1 g: ]2 E s 1.调试器的选择 4 [" l% |7 E! h& g S! Z5 p6 x 选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。 ![]() 2.调试目标初始化文件 按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。 ![]() % o9 L4 s( @, O. q7 @ 3.Cortex-M 目标设备调试驱动配置 / A+ G y$ H7 ^* u 选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。9 Y6 ^4 ^& p v. r& |0 Q ![]() 4.Trace功能的配置7 X7 `) j0 e3 t0 _$ N # H( ^: X% C4 H! m% P" T Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。 ![]() : K* f5 q1 I8 @7 P. p 二、实时跟踪7 B' `7 N$ R$ f, R4 j2 b% m# [! [ ; h Z; K* Z6 Q3 M% ]. `, W6 t0 C7 } 1.μVision的状态栏信息 h1 u2 d" O3 j+ r$ u 在μVision的状态栏中显示了实时跟踪的状态信息。/ m* z* X" w/ v+ L, k. S ![]() ! O0 s% E- y+ P9 x$ t" `8 M% Z 2.实时跟踪窗口 ( |2 X; ^, y# _0 a0 R9 v4 J; b9 K' t 调试时选择Peripherals – Trace。 ![]() 1)Trace Records窗口 该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。1 y; O: ?' o. { N0 @$ o8 K" ] ![]() ) H$ O. c, @+ x1 w/ v 2)Exception Trace 窗口- m9 L5 I: r& a( r 该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。' b2 i. B( P$ w6 C* m ![]() 2 V7 O4 n- H/ k. x; {2 w# ^+ o 3)Event Counters窗口2 @2 ?, s, W9 s( `) V' W$ P 这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。 ) b( V3 j" c5 { ![]() & y) W- w H: s2 u! y 3.ITM Viewer窗口 9 Z- ]+ |( H/ o- S# @* \5 j6 c- U: S 可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。7 V% h! Y3 J2 ?# R0 h8 _7 u 8 Y" [3 F; G {2 i* }5 k" b, g* H l 在源代码中添加ITM激励端口寄存器的定义。4 K( H9 W: Y* [; G: i ; v6 D; r* J3 X- L6 Q# `. d( q0 [ B# w #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))/ h6 y& x- P% Z- [% w& h1 ~/ }; P3 W #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n))) #define DEMCR (*((volatile unsigned long *)(0xE000EDFC))) #define TRCENA 0x01000000+ {+ E8 b0 h6 M, Q l 在源代码中添加fputc函数,它向ITM的激励端口0寄存器写数据。如果有了fputc函数,则可以用printf函数做为调试输出。ITM的激励端口0与ITM Viewer窗口固定连接。 A- ?) z% g7 F' {6 I struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout;. [4 R1 u- A5 D FILE __stdin; int fputc(int ch, FILE *f) { if (DEMCR & TRCENA) {* G, A" N( p8 Y6 H3 y x while (ITM_Port32(0) == 0); ITM_Port8(0) = ch;0 A) ?! ?, u7 @6 k' i6 ?' O( c) n5 I } return(ch);. w: g# k. T9 q7 w) A }; }/ X- P5 H# b) x8 k4 _ l 在源代码中添加printf函数来显示调试跟踪信息。7 i+ e9 N- v0 V1 |, Q printf("Serial Wire Output Debug Trace message"); l 在Cortex-M Target Driver Setup窗口中使能ITM激励端口02 b- d! r. G5 `4 f2 Y ![]() l 在目标调试期,打开ITM Viewer窗口/ }2 }% u4 V6 Q0 r4 ~. ~ * M+ j1 s$ G' ]+ Z- B6 @ 选择μVision-> View -> Serial Window -> ITM Viewer ![]() 完成这些步骤以后,可以在目标调试期通过ITM Viewer窗口查看到调试跟踪信息,例如显示AD转换的结果。 ![]() 9 N, g: N' ~7 Q6 e. S" } ITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。& h d$ y: a# @2 W! h. t B1 Z. C 4.Logic Analyzer 窗口2 r! i3 z8 X, J1 g2 W- O0 g) w6 I0 t / T& j: W3 d; u 在调试的时候,可以通过逻辑分析器观测至多4个变量值的变化。执行以下步骤来使用逻辑分析器。 · 在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。% u7 ^. x' o: y/ x/ A8 w ![]() 要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。* E% X' {9 k+ o3 _ / z* L; I I4 @, b · 添加准备观测的变量到逻辑分析器中% F3 a( m: O; U1 p& R* u3 w · 在调试过程中观测变量值的变化 ![]() 5.RTX Kernel Event Viewer 窗口& U! ]0 A6 P* P + z. p: K9 U2 d4 g( d6 V. R 当运行RTX系统时,RTX Kernel Event Viewer 窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。 9 W+ U/ H6 A1 v; P7 b2 K. R 执行以下步骤来使能RTX Kernel Event Viewer。 · 在Cortex-M Target Driver Setup窗口使能ITM 激励端口31$ i9 M. G/ E' g6 Y# {9 d ![]() * B+ Y+ v3 k: j · 选择Trace Enable,设置正确的Core Clock。) B- Z: A9 `/ b% s9 u/ [ ![]() · 核查Timestamps为enabled.2 E- X7 K8 v8 [# v" G, N ![]() ' [% W& O( G' L · 在目标调试过程中打开RTX Kernel窗口) U3 {" m% }7 u2 s8 ^: I2 u , I$ V. r( d; O 选择Peripherals -> RTX Kernel ![]() 2 g4 Z/ [* Z% \ · 在RTX内核窗口选择Event Viewer标签 ![]() 0 W* J8 I9 Z; Z9 H1 U 在窗口中更新了每个任务转换过程。选择in或者out按钮放大或缩小窗口。点击all按钮可以显示所有事件记录。' T' ]( w2 a e4 h( _ Z9 {* [ k + K5 l1 b; K" l7 [2 ~# ~0 f 出处:小野狼 |
回复:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪