你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用RealView MDK进行SW调试和实时跟踪

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:34
STM32有两个调试端口,即JTAG和SW。Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。
* `; y# Q  z. N" K! }' 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.调试器的选择
" _; ~. T' r# X! S5 u3 x. L! G: H3 X+ l( m  D% C) }$ l
选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。
+ F1 M; `1 L1 b1 A' V
$ H0 x2 s) {$ ?- y# [& U2 I, Y0 U
2.调试目标初始化文件
  E( `; X& h6 J. _5 V7 A) 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 Q
8 A/ V# A, ~+ W% ~
3.Cortex-M 目标设备调试驱动配置: w- ~* H" V) B. q2 K

3 @4 I: H6 M) h选择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 等。
! q: v0 u; r8 x/ 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
二、实时跟踪
; o' ]+ u  `) P* {* 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的状态栏中显示了实时跟踪的状态信息。
0 X. v$ Z9 p, W4 m1 u: R
' O3 }4 g* v/ x* [+ Y% l
4 d3 S. b" ]! W  F! a% Q2.实时跟踪窗口
$ @2 q& D' p  C8 \* r: q
3 C& |- {/ T  m# G# e调试时选择Peripherals – Trace。
+ |' ^9 q, s* u, ^# X& E1 j; D7 }, N5 N5 L) j0 F0 y/ T" Y

( u4 s/ Q4 K, ?) H4 }/ G; @% Y1)Trace Records窗口; ^3 V' h2 r: l/ x

) i, q5 V' K+ V  E) i该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。" g; Z& G' v  m6 S, j

/ ~) A# V& o9 x& M$ H2 a3 S. U8 _: K& V0 T  [
2)Exception Trace 窗口+ V8 A+ r8 Z# Z2 Y+ S, V' t

) k5 [8 D% p8 p, ]$ w5 i该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。1 m6 P/ ]% S5 }3 a, a4 F" V9 y

2 l" b( V$ d6 {( U+ o# o$ g) p6 b2 W
3)Event Counters窗口6 S- C" `" t3 K# p8 S* R8 a

0 V8 x/ _% u: h, W这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。 & u+ L% h: _" o
5 Z) F7 i- i% f$ W4 e# _" V

+ M0 h8 e2 }1 {9 c3.ITM Viewer窗口* v/ s/ p: h7 }3 |6 P, ~

1 G' I7 q% J4 i" d$ d0 z7 }, r可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。
! P& p$ T! x- ]" V7 D* ^0 e5 [4 E% f' f9 u
l   在源代码中添加ITM激励端口寄存器的定义。4 Z* R$ n0 z; M, {

1 _, J0 W* g3 V1 p9 s* m" a#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
# a1 O3 @" }& a8 G#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
1 ~5 {" X% Y6 yl   在源代码中添加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 */ };
8 X% _  O3 j2 Z2 @2 J/ vFILE __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) {
  i7 M9 f( f" D6 w4 }if (DEMCR & TRCENA) {
6 E# T) }  e' h& e; }# Dwhile (ITM_Port32(0) == 0);
( A1 `2 z: w, S: O/ b, iITM_Port8(0) = ch;7 |' u- G8 n! S; M$ t- x$ }
  }
% Q/ g8 {, e2 greturn(ch);
. [; e  h7 r  K, ?! D7 @4 y, S}
2 V0 l* I6 w+ N2 [% R8 k9 Y1 y) h( Cl   在源代码中添加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 X

; c7 ~5 ?" B; Kl   在目标调试期,打开ITM Viewer窗口
4 ]8 N/ q# |1 @2 t& Q# q4 i$ p: p5 v+ n4 J. I6 F
选择μVision-> View -> Serial Window -> ITM Viewer
: ]% G1 u- `( P/ 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 `  _

' C8 J6 U9 U1 m! {, b* nITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。  l% W, h, ?, F1 k% r7 D: H

% `9 J: V4 k1 V# l3 f4 I9 A4.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

5 y( N  p, b, `2 n· 在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。6 S. D& G1 M& o# O
3 Y# G& ?# @6 ~8 Q6 w! Z

3 Y8 }+ T, I4 G6 D要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。3 L2 [7 H, m! ?( |$ g3 y8 ?
. x  r" h$ c" `' j! k7 j0 `6 P
· 添加准备观测的变量到逻辑分析器中
) l, l( S2 g! w, ~$ B* E· 在调试过程中观测变量值的变化
' q3 D3 N: o4 [
8 q, V7 p! }  ]
# S9 ?0 g+ e- }6 M5.RTX  Kernel Event Viewer 窗口2 a$ N# L9 B0 X  p

; q* N! n# K' p3 G  D5 o8 t当运行RTX系统时,RTX Kernel Event Viewer 窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。+ ?( [7 B6 M$ ?
5 w% [8 g8 S4 p8 Y
执行以下步骤来使能RTX Kernel Event Viewer。
6 ]$ u3 t# z0 Q3 ?& H0 y+ G· 在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。
* }' m. l- A! C5 P
/ C# ^6 Q/ N/ h8 F/ E. V( K0 j1 d1 g- t% M
· 核查Timestamps为enabled.
" U( J( i: U6 P4 B1 y5 i$ Y! w8 c: _4 `7 l
4 }; L# r9 b% W( m0 y; @
· 在目标调试过程中打开RTX Kernel窗口
6 H7 U: J+ @% y0 h. c, o" J# \+ B# G
选择Peripherals -> RTX Kernel  h9 h5 C0 F, ]$ P

/ e% j& N) W: ^7 Z8 f' m  N. ~9 b1 v: ]3 j8 a0 F9 M  P8 A
· 在RTX内核窗口选择Event Viewer标签  
7 k. V: Y" ]" D1 Z; 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

8 O* V, M  @5 O( d  z出处:小野狼
收藏 评论3 发布时间:2008-9-3 20:34

举报

3个回答
yuying-66519 回答时间:2008-10-6 12:40:59

回复:使用RealView MDK进行SW调试和实时跟踪

顶一下
simage 回答时间:2008-12-8 20:31:53

RE:使用RealView MDK进行SW调试和实时跟踪

ST的工具做的很强大嘛,呵呵
ddllxxrr 回答时间:2009-3-15 09:35:17

RE:使用RealView MDK进行SW调试和实时跟踪

小锒,这个我浏览过,我的问题是,只用两条线,能不能象HJTAG那样简便点,

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版