找回密码
 注册
关于网站域名变更的通知
查看: 339|回复: 1
打印 上一主题 下一主题

迅为i.MX6ULL开发板IAR JLNK调试SDK程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-29 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在1.2.2章节我们安装了SDK程序(安装位置:G:\nxp),在1.2.3章节我们安装了IAR开发工具,接下来我们打开IAR开发工具,如图 1所示
$ L1 L) \/ O- b+ v8 H! X5 e0 R$ W, {2 A) S* h  J- N5 ^  B% o! |
在本章节我们主要是讲解如何通过IAR+JLINK调试i.MX6ULL的IAR工程,关于IAR工具的具体使用,大家可以网上查找相关的文档。
" w+ s( x! b% @5 m0 w! a然后我们点击“file->open->workspace”,如图 2所示:& n( p, G  Z5 d
6 `1 k0 Y  c. e) }5 h& t
然后会打开“Open Workspace”对话框,我们这里以sdk里面的hello_world工程为例,来学习一下通过JLINK来调试i.MX6ULL的程序。该工程的目录在sdk安装位置的“boards\evkmcimx6ull\demo_apps\hello_world\iar”目录下面,因为我们的sdk安装到了G盘的nxp文件夹下,所以hello_world工程的绝对路径是“G:\nxp\boards\evkmcimx6ull\demo_apps\hello_world\iar”(大家可以根据自己sdk安装的位置,选择对应的目录)。我们在“Open Workspace”对话框里选择hello_world工程的目录,最终在改目录下选择“hello_world.eww”(IAR工程文件的后缀名是eww),然后点击“打开”按钮,如图 3所示
& @% A' K9 T$ K+ F4 W
6 U3 B; u# U" N* B- a# O& G+ I: M0 b0 b5 a/ A7 i7 O+ h) Q1 E2 t
Hello_world工程打开后的界面如图 4所示:! g1 @8 A" |7 w  F( B
2 E; N# b* w  ]
我们可以看到该工程提供了四种编译方式,如图 5所示:
, F! u6 I9 @1 l2 B" @: `: w) ~8 x9 a: l  q7 _9 r
我们这里使用默认的“ddr_debug”方式编译该工程。
, ]  s" U9 F& f+ ~; Q我们可以点击工具栏上的“Make”按钮,编译该工程,如图 6所示:9 U8 {  o. |# \& |9 E! o( J
" {' ]' F& J* C% a, H+ k6 w$ o

从上图的编译结果输出信息,我们可以看到编译成功。

然后我们连接JLNIK V9下载器到i.MX6ULL终结者开发板的JTAG接口,如图 7所示:

4 n4 u& l9 k; j' J* z1 \( a3 m' p

由于i.MX6ULL芯片的JTAG接口和SAI(声卡)是复用的,所以我们使用JTAG接口的时候需要修改下开发板(V1.0的底板需要去掉底上的电阻R183;V1.1的底板需要去掉声卡芯片旁边的跳线帽(J50))。

然后我们连接开发板的调试串口到PC电脑上,并在电脑上打开串口终端,串口终端的波特率设置成115200,8位数据位,无奇偶校验,1位停止位,不选择流控,如图 8所示:

5 r- p, u2 M( a' I# b' d% W

设置完成串口终端,我们打开串口终端,如图 9所示:

+ h4 [3 E! k$ f; L  P

然后我们给开发板上电,接着我们在IAR工程界面的菜单栏点击“Debug without Loading”图标,如图 10所示:

, z1 k* o% s- e; o* N% E5 ]/ `' p

如果JLINK和开发板的JTAG接口连接正确的话,会进入到调试界面,如图 11所示:


5 X5 a# w0 S: u! \8 k  G! g

从上图我们可以看到hello_world的程序已经开始运行,程序的指针在main函数入口处停止,等待我们执行调试。
; K/ O# m: \- P! q& w  c* m$ rIAR进入调试模式以后,在菜单栏上调试相关的快捷图标会变成有效状态(鼠标可以点击),与调试相关的几个快捷图标如图 12所示:

0 ?; v7 i! d4 k  O' {& |

从上图,我们可以看到一共有7个快捷图标,他们分别是:

Step Over:单步执行(没点击一次,程序相应的运行一行)

Step Into:如果程序指针当前指向的是一个函数调用,如果点击此图标,则会进入到当前指向的这个函数内部

Step Out:与Step Into想对应,如果我们通过Step Into进入到某个函数内部去执行了,此时想返回到之前的函数,并继续执行此前函数的吓一跳命令,我们可以点击此图标

Next Statement:右击某一行选“Set Next Statement”,可以不执行中间程序,执行点直接到此行,用于不执行某些代码

Run to Cursor:程序调试的时候运行到光标处(我们可以在任意一行程序鼠标单击一下,使光标定位到该行,然后点击“Run to Cursor”,程序就会运行到光标所在的行,并停住)

Go:执行程序,程序遇到断点会停止,如果没有设置断点,程序就会一直继续执行

Stop Debugging:结束调试模式


& Y9 v; |7 A/ }% L+ e

在调试模式下控制程序执行主要通过上面的7个快捷图标来实现。

下面我们来看一下怎么给程序设置断点。IAR工程里面给程序设置断点很简单,我们在普通编译模式或者调试模式下,只需要鼠标点击每行最左侧的灰色空白区域,就可以为该行添加断点,如图 13所示:


2 p1 N1 e, j( ~' b2 B7 H' G+ s

断点添加完成后,如图 14所示:


3 [( Q4 B: ?# r& d: m& @$ q; B# X

从上图我们可以看到添加断点的行,在该行的最左侧会有一个“红色的实点”。

取消断点的方式和添加断点的方式一样,我们只需要鼠标单击断点的“红色实点”,就可以取消添加的断点。

接下来我们演示下通过JLINK调试i.MX6ULL的程序,我们在编译完成hello_world工程以后(点击菜单栏的Make快捷图标),然后点击菜单栏的“Debug without Downloading”快捷图标,进入调试模式,如图 15所示:


. q/ u5 b( Y  p: l

然后进入调试模式,程序指针跳转到main函数的入口处,等待调试运行,如图 16所示:

$ s6 L1 S( D' u! V, l7 e" }

然后我们在调用PRINTF函数的一行添加一个断点,如图 17所示:

2 v; Q8 E( s, {0 M+ R! m

然后我们点击调试快捷图标中的“Stop Over”开始单步执行,程序数显会执行到“BOARD_InitPins();”一行,如图 18所示:

1 y1 r8 S. u7 h9 A

然后我们继续点击“Step Over”快捷图标,程序运行到“BOARD_BootClockRUN();”该行,如图 19所示;

; {6 i  _/ `# E/ ]+ `; a5 P

我们可以看到上图中程序指针指向的该行“BOARD_BootClockRUN()”是一个函数调用,接下来我们演示一下“Step Into”快捷图标进入到函数内部执行的功能。我们点击调试快捷图标中的“Step Into”快捷图标,可以看到程序指针进入到BOARD_BootClockRUN函数内部,如图 20所示:

- n* ?2 C1 B6 @. z9 ]

然后我们把光标定位到“if (CLOCK_GetMux(kCLOCK_Pll1SwMux) == 0)”该行,然后点击调试快捷图标中的“Run to Cursor”,延时下该图标的功能,点击完改图标,程序指针直接运行到了

“if (CLOCK_GetMux(kCLOCK_Pll1SwMux) == 0)”该行,并停在了该行,等待我们继续点击调试快捷图标,如图 21所示:


/ N6 m- r/ ]: ?" _! {

然后我们点击调试快捷图标中的“Step Out”快捷图标,演示下跳出“BOARD_BootClockRUN”函数,并继续运行该函数后面的程序,运行结果如图 22所示:

6 Y+ E' H: B) O* M; |: |" M

然后我们点击调试快捷图标中的“Go”快捷图标,演示下该图标的功能。我们在“PRINTF(“hello world.\r\n”);”一行添加了一个断点,运行结果如图 23所示:

& ^) t4 M* `" l! E( V, D( I# G/ z

从上图我们可以看到“Go”快捷图标的功能是程序继续运行,如果遇到断点,就停止,否则一直往下执行。

上图中的程序最后进入while(1)主循环,在while(1)主循环里面主要实现接收串口数据,并把接收到的串口数据通过串口再次发送出去。为了验证“Go”快捷图标在没有遇到断点的情况下会一直执行,我们继续点击“Go”快捷图标,继续运行程序,我们可以看到串口终端打印输出了“hello world.”字符串,如图 24所示:


3 R- I6 L# r$ X# w* |

然后我们在串口调试终端输入任意的字符,可以看到串口调试中断会打印出我们输入的字符,运行结果如图 25所示:


$ ^  Q& ~4 F' l# s4 ?7 k

我们在调试完程序,可以通过调试快捷图标中的“Stop Debugging”快捷图标退出调试模式,运行结果如图 26所示:


( }3 Q$ w% H0 o$ {" P+ @! Q

- x6 T7 y# M5 I2 r) O1 C2 @

该用户从未签到

2#
发表于 2021-3-31 13:13 | 只看该作者
                           
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-24 21:18 , Processed in 0.062500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表