STM32有两个调试端口,即JTAG和SW。Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。' n4 a* m, z u2 U 本文描述了如何配置和使用SW接口来获取各种调试信息。2 ~8 U9 f: M% t # Z& y! _" |/ i. R7 x 一、目标调试阶段的配置' q- y7 S4 p/ Q ~/ N5 ]/ w5 d # t& [' H+ o* I' r7 C, T5 E& O( n 1.调试器的选择 3 X+ l( m D% C) }$ l 选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。 ![]() # [& U2 I, Y0 U 2.调试目标初始化文件 ) g7 p( F2 }/ U/ ?5 W: m 按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。' T# {9 L5 x& k, F 5 j$ _, e9 r2 @, K9 Q8 A/ V# A, ~+ W% ~ 3.Cortex-M 目标设备调试驱动配置: w- ~* H" V) B. q2 K 选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。$ S) B+ H6 T; K) L- l8 L. A. t/ j $ l$ v3 l3 K2 G; _# U9 j/ z: q7 A5 h+ q! I5 ~$ r7 c4 `( ] 4.Trace功能的配置7 D. I6 D' H/ H / [. B7 }' P: S Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。 / c B7 i- [) b$ _, B' M1 l! N: r+ w: \7 u& B, A, B " K, `2 y$ k9 h2 N. c+ M7 p2 A# n) b 二、实时跟踪 * w( g3 z3 Q( F. i. g 1.μVision的状态栏信息7 t7 d/ R$ N5 c: i+ k/ ^& H ; u' j6 x% y% y; Y2 E, j 在μVision的状态栏中显示了实时跟踪的状态信息。 2.实时跟踪窗口 调试时选择Peripherals – Trace。 7 }, N5 N5 L) j0 F0 y/ T" Y1)Trace Records窗口; ^3 V' h2 r: l/ x 该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。" g; Z& G' v m6 S, j ![]() $ H2 a3 S. U8 _: K& V0 T [ 2)Exception Trace 窗口+ V8 A+ r8 Z# Z2 Y+ S, V' t 该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。1 m6 P/ ]% S5 }3 a, a4 F" V9 y ![]() # o$ g) p6 b2 W 3)Event Counters窗口6 S- C" `" t3 K# p8 S* R8 a 这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。 & u+ L% h: _" o 5 Z) F7 i- i% f$ W4 e# _" V3.ITM Viewer窗口* v/ s/ p: h7 }3 |6 P, ~ 可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。 7 D* ^0 e5 [4 E% f' f9 u l 在源代码中添加ITM激励端口寄存器的定义。4 Z* R$ n0 z; M, { #define ITM_Port8(n) (*((volatile unsigned char *)(0xE0000000+4*n))) #define ITM_Port16(n) (*((volatile unsigned short*)(0xE0000000+4*n)))3 n8 u6 t! J9 C) d1 F# i' b2 v! E #define ITM_Port32(n) (*((volatile unsigned long *)(0xE0000000+4*n)))0 z6 H% a# s( Y! h/ e$ F' O" S; T #define DEMCR (*((volatile unsigned long *)(0xE000EDFC)))6 v: O: ?. X+ s! f2 z: I e% ? j% p #define TRCENA 0x01000000 l 在源代码中添加fputc函数,它向ITM的激励端口0寄存器写数据。如果有了fputc函数,则可以用printf函数做为调试输出。ITM的激励端口0与ITM Viewer窗口固定连接。, m' `: W6 s, M5 @5 W) V " M$ x8 o9 M5 C struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout;7 n" B- P7 e, Q+ j7 I# ], h/ Z FILE __stdin;/ n% ^* z5 x# H, d! ]9 n int fputc(int ch, FILE *f) { if (DEMCR & TRCENA) { while (ITM_Port32(0) == 0); ITM_Port8(0) = ch;7 |' u- G8 n! S; M$ t- x$ } } return(ch); } l 在源代码中添加printf函数来显示调试跟踪信息。$ w: p- A0 ~3 R$ e4 m' R$ {2 U& t " C% K/ Q; x$ E7 X" G6 a8 i printf("Serial Wire Output Debug Trace message"); 8 z- j* K5 t1 o4 h; M6 V4 ^5 F0 K l 在Cortex-M Target Driver Setup窗口中使能ITM激励端口0& l+ K ^; U' p& y' ^8 b4 V" ]% S9 ^8 Q0 Z 3 v I$ ~& u; Y( h$ z2 Y3 Xl 在目标调试期,打开ITM Viewer窗口 & Q# q4 i$ p: p5 v+ n4 J. I6 F 选择μVision-> View -> Serial Window -> ITM Viewer / h) r# I3 D a) K( a2 V3 ]* O3 h- x. w: c* o 完成这些步骤以后,可以在目标调试期通过ITM Viewer窗口查看到调试跟踪信息,例如显示AD转换的结果。$ m5 U/ b8 m4 Y2 x 1 N. K! a8 ` _ITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。 l% W, h, ?, F1 k% r7 D: H 4.Logic Analyzer 窗口0 j* y: W) H9 ]2 T( F# l # n* a ^& E- z6 x, Q5 k 在调试的时候,可以通过逻辑分析器观测至多4个变量值的变化。执行以下步骤来使用逻辑分析器。2 [* H) f" L9 }4 {$ T · 在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。6 S. D& G1 M& o# O 3 Y# G& ?# @6 ~8 Q6 w! Z要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。3 L2 [7 H, m! ?( |$ g3 y8 ? . x r" h$ c" `' j! k7 j0 `6 P · 添加准备观测的变量到逻辑分析器中 · 在调试过程中观测变量值的变化 ![]() 5.RTX Kernel Event Viewer 窗口2 a$ N# L9 B0 X p 当运行RTX系统时,RTX Kernel Event Viewer 窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。+ ?( [7 B6 M$ ? 5 w% [8 g8 S4 p8 Y 执行以下步骤来使能RTX Kernel Event Viewer。 · 在Cortex-M Target Driver Setup窗口使能ITM 激励端口31* Z8 \. A+ e( ?6 [ : ]+ s( [6 C2 x. j2 O: F; C# p2 e2 P8 |+ E5 M4 C8 g+ L: R- m · 选择Trace Enable,设置正确的Core Clock。 ![]() 8 F/ E. V( K0 j1 d1 g- t% M · 核查Timestamps为enabled. 5 i$ Y! w8 c: _4 `7 l4 }; L# r9 b% W( m0 y; @ · 在目标调试过程中打开RTX Kernel窗口 , o" J# \+ B# G 选择Peripherals -> RTX Kernel h9 h5 C0 F, ]$ P ![]() . ~9 b1 v: ]3 j8 a0 F9 M P8 A · 在RTX内核窗口选择Event Viewer标签 ; l6 F: P% |5 l! e/ m% \4 {& j2 j; Q9 Q) c! U9 w% m0 b1 d 在窗口中更新了每个任务转换过程。选择in或者out按钮放大或缩小窗口。点击all按钮可以显示所有事件记录。/ U# D- G" j+ }1 ]/ l 出处:小野狼 |
微信公众号
手机版
回复:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪
RE:使用RealView MDK进行SW调试和实时跟踪