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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 20:34
STM32有两个调试端口,即JTAG和SW。Keil 的ULINK2 USB-JATG接口适配器支持这两种调试接口。
0 ~- h* C. q6 T0 P
2 W# R; U# s0 p$ j# d; o. L, k本文描述了如何配置和使用SW接口来获取各种调试信息。
8 f- F8 P' \- T3 Q. u# P5 {: x/ a& a6 p
一、目标调试阶段的配置
( v; B2 U- X9 w! }( P
# r" a' Z- w: h' x4 A1.调试器的选择3 O5 U, Y8 Z; m: k2 Q

) _- x. c" y- u( L选择μVision->Debug ->Options for Target –>Debug,并选择ULINK Cortex Debugger调试器。9 r5 g, |1 u7 C' b0 O& h

' v" J0 c- I3 @8 p3 P1 I0 U
- @+ h% l- [) J, l2.调试目标初始化文件
( g' u* \, ^2 e  k+ }' ]4 O' f: V; b: C5 V7 W, o9 @/ R- K
按照路径\Keil\ARM\Startup\ST,将文件STM32DBG.ini拷贝到工程文件夹中。选择μVision->Debug -> Options for Target –>Debug,同时在Initialization File选项中选择该文件。
6 T0 ?& N1 z1 v( B
2 n# u5 K. E9 E& t% W; O- b) H& c9 i: Q+ k+ Z+ l3 Z* y
3.Cortex-M 目标设备调试驱动配置$ X8 M* B( K. F2 X
9 j; g0 q0 n1 r  I9 E7 R( [
选择Options for Target – Debug – Settings,设置SWJ,端口选择SW。7 L8 `6 [( N' V8 n7 k) h6 F" S; V/ V

9 r! H5 n4 x9 Z3 @- t9 Y
! N, s" K5 c" f, l$ {4.Trace功能的配置
* Q( m% [/ \5 \& f# ~: L$ m6 n5 ^+ a# T' Y3 Y
Trace功能包括:Core Clock, Trace Port 以及定义TraceEvents 等。: f* G: S3 q! f3 X2 ?

- O; T, @' J$ B0 M) \5 Z- i9 Z- S1 M! H( y# @* B  M

& b1 p  N, A' T# P- ]2 s2 H二、实时跟踪# u: `3 c% s& z$ i

4 x! ~; @5 m2 Y' r6 u" {5 |1.μVision的状态栏信息$ ?7 `9 I. U8 o. {& s

- B5 X( Z  [  p  N" j在μVision的状态栏中显示了实时跟踪的状态信息。
& K) M9 s7 r) W/ E+ z! }
0 r& W* X0 A& f, i  A; c& P6 S, W" P3 t& W/ s/ y2 Y
2.实时跟踪窗口+ m. U' Y9 {$ r1 N4 S

( }' `& w  M2 k$ T7 ]3 r$ [调试时选择Peripherals – Trace。1 J6 j7 Y* G$ {! p  t. e0 X0 w
" W, O. ~/ x. j. J5 [
/ y8 {' E# S. z( k4 R( r& D9 @* a6 Z
1)Trace Records窗口# g, o0 K. ]( h; p4 m

' B( K& B" s8 S$ V+ i该窗口显示了所有被捕获的跟踪记录,每一个跟踪记录都包含了详细的信息。可以选择Peripherals - Trace – Records来查看。
5 p3 \/ u* K8 @# A7 r! O
' ~' |! N2 q/ k/ r! C- O: V+ P' c5 d% i. X5 ]/ J
2)Exception Trace 窗口
9 N. ]  i9 |; O2 C8 V- x* `
* G1 m& ^, f: j0 a该窗口显示了异常和中断的统计信息,这些信息是基于Trace Records中所捕获的跟踪记录的。可以选择Peripherals - Trace - Exceptions来查看。( A8 @' H; e0 \0 u/ K# X% g
) f& T7 i9 r  b. M! E% j
4 |7 x  o- H  F. b! i  S! f
3)Event Counters窗口
  J3 k4 B! P; a: g1 J7 H: J) c; z9 q3 @9 G$ }4 @
这个窗口显示了特殊事件计数器的值,计数值是基于Trace Records中所捕获的跟踪记录的。
4 l" F* @9 X3 M7 S& a
: C" U( {6 o' V. r4 o( }! c1 S+ W7 s0 h
3.ITM Viewer窗口
0 p. _+ V( I  o. O2 u
/ Q8 f/ Z8 t5 h可以通过ITM的激励端口0在ITM Viewer窗口上输出ASCII 或 Hex格式的数据,目前只有ITM 端口0可以在ITM Viewer窗口显示。要使用ITM Viewer窗口来显示调试跟踪的输出信息,需要进行以下的操作。
0 n6 K% ^8 h( r3 h7 q6 o, M% d# z1 [, \# \$ [
l   在源代码中添加ITM激励端口寄存器的定义。1 q1 o& z. x( _* W$ m7 d3 l7 w3 d1 U

9 `6 [/ r* ?! e% H# j#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))" r& ?4 L6 k. L! \
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))3 t. r# i$ M2 {9 ~
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))& e& V# m- B! P- D
#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
: d+ k. i9 g, ?; K+ [) F  h" v#define TRCENA          0x01000000) k$ n! J7 t% D- b1 K
l   在源代码中添加fputc函数,它向ITM的激励端口0寄存器写数据。如果有了fputc函数,则可以用printf函数做为调试输出。ITM的激励端口0与ITM Viewer窗口固定连接。- h8 X7 }+ l4 i2 [5 I# j
2 i. P& e# a! L8 }; x( A
struct __FILE { int handle; /* Add whatever you need here */ };
* |( S8 P' z0 WFILE __stdout;/ Q5 a+ Y# W  R: S7 i3 a' X
FILE __stdin;
5 y  c% Z) t% B* O$ U  y% S  Sint fputc(int ch, FILE *f) {' Y7 E! Y4 h# N' T. F* K
if (DEMCR & TRCENA) {- D3 o+ @5 O, h: y! J* q
while (ITM_Port32(0) == 0);
" h! W, }2 s2 |ITM_Port8(0) = ch;
% G9 k$ [- B. z+ c  p  }
% S) g4 ]9 |$ w9 _& wreturn(ch);
/ W5 Y! w) I2 h7 z}
3 P( h. \1 a, `0 H8 ^l   在源代码中添加printf函数来显示调试跟踪信息。
7 `, o2 G6 S, M8 z5 f  c& t! h
; y% @  c# H+ j7 s# z3 ~printf("Serial Wire Output Debug Trace message");  ( J5 |- A- ^1 Z& q) h$ L- @- l# A
l   在Cortex-M Target Driver Setup窗口中使能ITM激励端口0
) i& n8 n. ]0 ?/ C
0 G1 Z3 D7 X- ^% ^* e2 o. d1 I7 Y0 Q/ |. W# T
l   在目标调试期,打开ITM Viewer窗口1 B& A! W/ Y& W" }

& w: k- _0 l1 R+ B9 W选择μVision-> View -> Serial Window -> ITM Viewer$ ?- [( M! a  C+ T& J3 s+ h
* q. K! R5 Q$ E6 E5 Z9 s5 Q

5 X( r; h. R3 x. N1 W完成这些步骤以后,可以在目标调试期通过ITM Viewer窗口查看到调试跟踪信息,例如显示AD转换的结果。: L- g0 j1 D2 @* C, p4 C

3 k7 ?% _3 B8 C) |& H7 C3 c
1 Z% c, l: L: a+ X- V: \9 N3 J. ~ITM Viewer的功能类似串口打印调试信息,使用ITM更简单,而且不需要串口以及相关驱动程序。; T, W5 O) E% }2 K9 G9 w. V1 T

. e6 M+ `: T9 ~' J4.Logic Analyzer 窗口
3 b4 }  v& G- W& z2 y5 B/ h, e5 S8 H) z
在调试的时候,可以通过逻辑分析器观测至多4个变量值的变化。执行以下步骤来使用逻辑分析器。
7 Z: N* [2 ]% h; b2 R
8 {' }* G9 e6 E· 在Cortex-M Target Driver Setup窗口使能Timestamps并选择合适的Prescaler值。3 L: m0 O& A8 O

4 C2 r1 e$ c4 A3 J$ F5 T9 }" v- b+ q6 ~# z5 H
要想在逻辑分析器的窗口中观测到精确的时间值,必须使能Timestamps。
0 t1 R6 Q4 U8 G
$ G6 |; j# V) {9 ?" f, }· 添加准备观测的变量到逻辑分析器中/ e2 b2 K' m( T1 j9 Y9 G8 m
· 在调试过程中观测变量值的变化& f" z% |# m. ?' `( T; S
# L  G+ }. L- l; \) [: X' L

/ t9 p( m( ~4 d+ \5.RTX  Kernel Event Viewer 窗口
& A% ]  O* H3 @# p/ W) j, @
7 u0 b2 D9 R- s( R, L  y当运行RTX系统时,RTX Kernel Event Viewer 窗口中显示了任务的切换过程,任务切换信息通过专门的ITM激励端口31来传输。  ^# c  S8 w' \9 J5 s
' H' [" d7 _  {; W7 G6 T
执行以下步骤来使能RTX Kernel Event Viewer。1 q9 P+ o: r7 u4 y3 Z( z. g: }
· 在Cortex-M Target Driver Setup窗口使能ITM 激励端口31- u+ a. L: G* a

' M3 V. D5 Q7 J) Z& B$ |/ w! `3 Y8 S" U' d
· 选择Trace Enable,设置正确的Core Clock。: o2 w* o2 {# H- P8 E. y

) _. C6 b) m$ d3 E1 O2 Z- b% e/ a7 J; {/ \
· 核查Timestamps为enabled.
8 ]& c1 j9 U9 ~" r6 q
( c7 L0 F3 V- \# X9 M" b0 M' B) P
7 k  X1 i- s6 H& K' o· 在目标调试过程中打开RTX Kernel窗口1 {& ?  u5 J2 ~# @) L, Y

$ I3 q% m, N, c9 J+ B" e选择Peripherals -> RTX Kernel
" e2 A, m! L/ ?6 o: o9 q  k  l+ _2 l5 [3 q# j
8 h1 q$ |5 L; j! H+ p1 B6 j
· 在RTX内核窗口选择Event Viewer标签  8 q% ^* v9 g2 O- B+ x/ E4 N. W. V

+ q" R1 M* b3 Y+ V5 X7 b
; I/ S5 Z5 H5 G3 O在窗口中更新了每个任务转换过程。选择in或者out按钮放大或缩小窗口。点击all按钮可以显示所有事件记录。4 X" ]. ], ^9 X

0 W& V4 d- X6 }" \0 B# Y8 B出处:小野狼
赞 收藏 评论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 手机版