汽车电子expert成长之路

本博客发布的个人原创精品----嵌入式系统技术文章,欢迎大家参考学习,并转发分享!

CodeWarrior IDE使用tips之bug定位绝技--hotsync与attach调试

0
阅读(790) 评论(0)

引言

1. CodeWarrior IDE版本与Hotsync和attach调试功能介绍

2. 利用CodeWarrior 5.x的Hotsync调试BootLoader和app应用工程

    2.1. 重新编译要加载调试信息的CodeWarrior 5.x应用工程

    2.2 连接BDM调试器硬件

    2.3. 打开Hiwave调试软件

    2.4. 设置调试器连接和选择正确的目标MCU part number

    2.5. 加载abs文件中的调试信息

3. CodeWarrior 10.6的attach设置和使用介绍

    3.1. 使用CodeWarrior 10.6.4的Attach调试CodeWarrior 10.x的应用工程

    3.2. 使用CodeWarrior 10.6.4的Attach调试非CodeWarrior 10.x的应用工程

结论


引言


        很多时候客户给我讲他们的程序下载之后工作异常--跑飞了,感觉没有按照正常流程执行等等,让我帮忙分析。这个时候,如果调试器能够在不复位MCU,不下载Flash的情况下,通过调试器建立CodeWarrior IDE与目标MCU之间的同步连接,加载已下载应用程序的工程调试信息,是不是就可以实现问题跟踪和bug定位了呢?


        此外,在开发BootLoader时,因为BootLoader和app应用程序是两个不同的完整工程,不同的工程有自己的调试信息和下载文件。在开发BootLoader时,我们一般都是先将BootLoader有调试器下载到目标MCU,然后,运行BootLoader通过CAN或者LIN总线下载APP应用程序,这时候通常压根没有调试器连接,很多人觉得无从定位bug。这时如果出现功能异常,比如app跳转不OK,app工程startup过程出现看门狗溢出复位,app应用程序代码下载不完整等,如果调试能够通过上述程序跟踪和bug定位功能,是不是也会非常有用呢?


1. CodeWarrior IDE版本与Hotsync和attach调试功能介绍

        不同的CodeWarrior IDE的上位机调试软件提供的上述调试功能方法不一样:对于CodeWarrior IDE来说主要有Hotsync和attach两种:

 

2.jpg

Hotsync和attach与默认的程序下载调试功能的差别在于:


        Hotsync和attach能够在不复位MCU,不下载Flash的情况下,通过调试器(BDM/JTAG/SWD)建立CodeWarrior IDE与目标MCU之间的同步连接,加载已下载应用程序编译结果文件(abs或者elf)中的调试信息,从而可以让用户像正常下载调试程序时一样对MCU进行调试---单步运行、全速运行、进入/跳出函数、设置断点以及复位,查看CPU内核和外设寄存器、监控变量,查看/导出RAM和Flash内容等。


        而CodeWarrior IDE工程默认的程序下载调试过程会复位MCU,并擦除和编程片上NVM存储器。


2. 利用CodeWarrior 5.x的Hotsync调试BootLoader和app应用工程


        下面我就以CodeWarrior 5.x为例,介绍在已经通过BDM下载完BootLoader并运行且通过CAN总线下载完成app应用工程之后,我们如何通过CodeWarrior 5.x的Hotsync热同步功能连接目标MCU,加载BootLoader工程(XEP100_host.mcp)和APP应用工程(XEP100_app_led1.mcp)调试信息,并进行debu调试。


        下面为具体实现方法和步骤:


2.1. 重新编译要加载调试信息的CodeWarrior 5.x应用工程


        如果要调试的bootloader/app CodeWarrior工程不是在原来编译的目录(包括拷贝到同一台电脑的不同文件夹或者发送到其他电脑)下,则需要先将该工程用CodeWarrior 5.x打开,重新编译,其目的是保证要调试工程的abs(也就是CodeWarrior 5.x工程编译结果的二进制可执行文件-elf)中包含正确的工程路径信息,在加载(load)abs文件后调试信息能够与工程源代码一一对应。

3.jpg

 

 

4.jpg

 

2.2 连接BDM调试器硬件


        将BDM调试器与目标MCU连接,这个时候需要注意,不能在将BDM调试器与PC电脑连接通电的情况,连接调试的BDM接口道目标板,否则可能造成目标MCU复位(由于调试器BDM接口上的reset管脚为低),从而破坏问题现场;


        PS:为了不影响目标MCU运行,可以先将BDM调试器与电脑和目标板连接好,在重新给目标MCU上电,让其运行,等待异常/问题重现。


2.3. 打开Hiwave调试软件


        在CodeWarrior 5.x的安装目录(eg:D:\Program Files (x86)\Freescale\CWS12v5.2\Prog)下双击hiwave.exe打开hiwave调试软件(也可以选择hiwave.exe右键-->发送到桌面快捷方式,在桌面上通过快捷方式打开):

5.jpg

 


2.4. 设置调试器连接和选择正确的目标MCU part number


        在打开的Hiwave调试界面菜单栏中选择Component-->Set Connection...

6.jpg

 选择正确的Processor和Connection:

        

点击确定,忽略此错误调试:

8.jpg

        选择正确的目标MCU part number:

        9.jpg

    设置调试interface和port(如果port处为显示正确的调试器连接,请检查相应的调试器驱动是否安装,硬件连接是否OK?),选择Hotsync热同步:        

10.jpg

    这样Hiwave调试器就和目标MCU建立了正常的通信连接,在Hiwave的右下角,可以看到正确的目标MCU part number(MC9S12XEP100)和调试连接状态(Target Ready):

11.jpg

2.5. 加载abs文件中的调试信息


        选择菜单HC12MultilinkCyclonePro-->load:

12.jpg

        在弹出的窗口中选择BootLoader host工程目标下bin子目录下的Project.abs文件,点击Load Symbols:

13.jpg

        这样调试信息就已经和目标MCU的程序关联起来了:

14.jpg

 

            从这时开始,我们就可以像正常调试时那样对BootLoader工程进行调试(单步运行、全速运行、进入/跳出函数、设置断点以及复位等)了。


        等BootLoader进入应用程序之后,我们在加载app应用工程的CodeWarrior 5.x工程abs文件的调试信息:

15.jpg

 

        加载app应用工程的调试信息:

 

16.jpg

    这样就进入了app应用工程,开始app的调试了:

17.jpg

 

        以下为进入应用工程main()的情况:

18.jpg

3. CodeWarrior 10.6的attach设置和使用介绍


        上面介绍了CodeWarrior 5.x的Hotsync调试功能,CodeWarrior 10.x的attach功能与Hotsync一样,但使用设置和使用相对简单些。调试的思路与CodeWarrior 5.x的Hotsync类似,这里就不仔细介绍了。


        下面, 就以CodeWarrior 10.6.4为例介绍其Attach功能设置和使用:


3.1. 使用CodeWarrior 10.6.4的Attach调试CodeWarrior 10.x的应用工程


        如果要调试的应用工程本身就是CodeWarrior 10.x的应用工程,那就是十分简单,只需要打开已经下载到目标MCU的应用工程(若该应用工程非本机/本地编译,则需要先将其clean重新编译一下,以保证elf文件中调试信息路径的同步),选中右键-->Debug As-->Debug Configuration..:

19.jpg

 

        .在打开调试配置界面,选中正确的调试目标(Flash/Debug Target),配置其调试会话类型(Debug session type),将由其默认的Download该位Attach,启动调试即可。

20.jpg    

 


3.2. 使用CodeWarrior 10.6.4的Attach调试非CodeWarrior 10.x的应用工程


        另外,也可以利用CodeWarrior 10.6.4下载和调试其他编译器(比如,S32DS、Greenhill、IAR等)编译的结果。由于不能直接打开原工程,这种情况需要先建一个目标MCU的新(空)工程,编译下载调试(当然是找一块闲置的目标MCU板子,而不是故障/问题板,否则现场将被覆盖破坏),保证其与目标MCU的debug连接链路OK的基础之上,通过上述方法,打开调试配置界面,通过Browse浏览打开目标工程的elf文件替换掉之前空工程的elf文件:

21.jpg

        并在Sourcs选项栏将目标应用工程的根目录(请务必勾选Search Subfolders)添加到工程源代码目录下,以保证attach之后,调试信息能够与源代码一一对应:

22.jpg

        这样设置之后再启动调试,就可以建立与目标MCU的连接了,开始attach调试了。


结论


        CodeWarrior IDE强大的hotsync和attach调试功能,为用户提供了一种跟踪调试、定位bug解决程序运行出错,异常等疑难问题的高效方法,一旦通过hotsync或者attach建立了CodeWarrior 上位机调试软件与目标MCU的连接,加载应用工程编译结果二进制可执行文件(abs或者elf)中的调试信息后,我们就可以像正常下载调试程序时一样对MCU进行调试了----单步运行、全速运行、进入/跳出函数、设置断点以及复位,查看CPU内核和外设寄存器、监控变量,查看/导出RAM和Flash内容等。


        此外,CodeWarrior IDE强大的hotsync和attach调试功能也是BootLoader开发时必须掌握的调试技巧。

         所以,掌握并使用好CodeWarrior IDE强大的hotsync和attach调试功能,将为我们打开一扇高效解决程序bug的大门,让我们在程序调试和bug定位,问题解决事半功倍。


胡恩伟

NXP汽车电子FAE

若对本文观点有任何意见和建议欢迎留言指出。

如果喜欢,可以关注本人公众号,阅读更多精彩内容。

1-1.jpg