keil在线调试技巧
keil在线调试技巧
转载:
1 程序调试⽅式
(1) 使⽤SEGGER J-Flash(J-Link)下载程序到闪存中运⾏。
(2) 使⽤串⼝ISP 来下载HEX ⽂件到CPU 中运⾏。
(3) J-Link + MDK 组合,来在线调试程序(可下载、单步调试)。
下载:是将具体的⽂件如.axf或HEX下载到开发板的flash(SRAM)中去,在开发板启动之后就会运⾏所 下载⽂件。根据运⾏结果再将修改的程序下⾄开发板中运⾏。
通过J-Link下载.axf⽂件时是在J-Link开发板与PC连接好后,通过点击KEIL中的“load”按钮将.axf⽂件下载到开发板内。
通过串⼝ISP下载HEX⽂件在C51中常见,如51下载程序到单⽚机内。
在线调试:通过调试器(如J-Link)将开发板和PC相连,既将程序下载到开发板中运⾏⼜能看见程序运⾏的结果(如变量的值)。
2 MDK-RAM-keil + J-Link在线调试
(1) J-Link + 开发板连接PC
Figure1:使⽤在线调试⼯具J-Link
(2) 设置项⽬编译属性
因为是使⽤J-Link在线调试程序,需要选择J-Link调试⼯具(建⽴⼯程的时候如果设置好了就不⽤再设置了)。如果J-Link连接开发板的接⼝为JTAG则PORT要选择”JTAG”。如下图:
Figure2:选择J-Link调试器
如果“JTAG Device Chain”处有内容则说明检测到了设备。
还需要在Utilities选项中做⼀些设置:
Figure3:Utilities设置
在”settings”中,点击”Add”按钮时选中开发板的控制芯⽚即可。然后点击OK保存。现在就可以进⾏在线调试了。
(3) 在线调试
[1] 单步调试
开始调试
程序经1编译通过后(第⼀个按钮表⽰只编译当前处在编辑界⾯的⽂件,第⼆个按钮表⽰编译整个⼯程中修改过或还未编译过的⽂件,最后⼀个按钮表⽰重新编译所有的⽂件)。确认J-Link连接完好,开发板已上电后,点击2中的按钮开始/结束在线调试。
Figure4:在线调试开始
1:绿⾊图标表⽰光标所在的⾏,黄⾊图标处为要运⾏的下⼀条语句。在线调试开始时处在mian()⼊⼝处。
2:这是调试开始后弹出的窗⼝,watch窗⼝⽤来观察程序中各种变量的“值”及“类型”,可以在watch窗⼝中⼿动添加待观察变量。
3:程序中的tx_data为具11个元素的数组,从值可以看出来程序还未运⾏到175⾏处。
单步调试按钮
单步模式下可以点击以下图标让程序往下执⾏:
以上⼏个图标对应的快捷键依次是:
F11: 单步执⾏,每次执⾏⼀⾏。
F10: 跳过当前⾏语句。
在线代码运行器Ctrl + F11: 跳出当前函数。
Ctrl+ F10: 运⾏到光标所处的⾏。
按F11到176⾏时,经执⾏过得tx_data数组个元素的值就在watch窗⼝中显⽰出来。
⼯具栏窗⼝
在“在线调试”状态下,许多“⼯具栏⼩窗⼝”会冒出来。
在红⾊⽅框内的⼏个⼩窗⼝从左到右依次是:
Register Window: ⽤于显⽰各寄存器的值,并显⽰运⾏时间。
Call Stack Window: ⽤于显⽰main函数内的变量及所调⽤的⼦函数地址/值。
Watch Window: ⽤来查看特殊变量的窗⼝。⽤户可⾃⾏输⼊某个变量名,根据程序运⾏的进度查看其值。
其它的窗⼝也有其特殊的⽤途,在对其有需要时可以打开瞧瞧。打开和关闭这些窗⼝的⽅式都是点击⼀下图标的⽅式。
查看寄存器值
进⼊调试之后,点击"Peripherals",然后选择要查看的寄存器名称。
进⼊调试之后,点击"View->SystemVier",然后选择要查看的寄存器名称。
进⼊调试之后,点击"View->Watch Windows"或者点击⼯具栏,只输⼊指针所指的寄存器的名称。
[2] 设置断点调试
单步调试毕竟是单步或者跳过函数的执⾏。在程序⼗分庞⼤时,F系列的键或者⿏标都要被按坏,设置断点后,程序运⾏到断点处就停下了,然后就可以再⽤单步调试的⽅式进⾏调试。
开始在线调试
点击调试按钮开始调试,如图Figure 5。
断点设置
到想要运⾏的代码处设置⼀个断点。设置断点的⽅法:
在源代码⾏号前双击。
⽤开始/停⽌在线调试旁边的图标。
Debug >> Insert/Remove Breakpoint(F9)。
使能/消除使能/移除断点的⽅法也是以上列举的3点。
点击Run
Debug>> Run(F5)
经以上3个步骤后,代码就从上⼀次代码停留处运⾏到断点处,结合Figure 4看下图。
Figure6:断点处
3 C基本数据类型占内存⼤⼩查看
将以下变量声明为全局变量后,在Watch窗⼝中观察的各变量的值。
cl =sizeof(char);
ucl = sizeof(unsigned char);
scl = sizeof(signed char);
il = sizeof(int);
ui = sizeof(unsigned int);
sil = sizeof(signed int);
ll = sizeof(long);
ul = sizeof(unsigned long);
sl = sizeof(signed long);
lll = sizeof(long long);
fl = sizeof(float);
dl = sizeof(double);
ldl =sizeof(long double);
Watch窗⼝中各变量的值:
Figure7:Cortex-M3 C语⾔基本类型⼤⼩
在keil下的编译器+stm32f10xxx芯⽚下,char占⼀个字节,int占4个字节,long占4个字节,long long 占8个字节,float占4个字节,double占8个字节, long double 占8个字节。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论