汽车电子expert成长之路

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

S32DS使用Tips--功能定位软件与bootloader、应用程序工程的联合调试

0
阅读(473) 评论(0)

S32DS使用Tips--如何配置和使能Attach功能定位软件程序bug和完成bootloader与应用程序工程的联合调试

内容提要


引言

1. PEMicro系列调试器与Segger J-Link调试器介绍

1.1 PEMicro系列调试器调试器:

1.2 Segger J-Link调试器

2. 基于PEMicro调试器的S32DS Attach调试方法与步骤

2.1 新建应用工程用于测试 PEMicro调试器工具链

2.2 在工程的调试配置选项中配置使能Attach调试功能

3. 基于J-Link调试器的S32DS Attach调试方法与步骤

总结


引言


之前写了一篇介绍CodeWarrior IDE下利用Hotsync和Attach功能debug应用工程的文章--《CodeWarrior IDE使用tips之bug定位绝技--hotsync与attach调试》。很多读者问,NXP最新的S32DS IDE是否也支持类似的功能,今天就在此专门介绍一下S32DS的Attach调试功能,其与CodeWarrior 10.6/7的配置介绍略有不同,以下将详解介绍。


本文介绍的方法和步骤适用于S32DS for ARM(V1.3/V2.0)以及S32DS for Power(V1.1、V1.2)。由于S32DS for ARM支持PEMicro系列和Segger的J-Link系列的调试器,其配置介绍不同,所以将分别进行介绍:


1. PEMicro系列调试器与Segger J-Link调试器介绍


1.1 PEMicro系列调试器调试器:


PEMicro系列调试器调试器包括以下接口类型:


  • USB Multilink/FX, OSBDM/OSJTAG-USB Port;

  • Cyclone-Serial/USB/Ethernet Port

  • TraceLink-USB/Ethernet Port

  • OpenSDA Embedded Debug--USB Port

     


具体使用哪一种调试器接口,需要用户在工程调试配置(Debug Configuration)界面的Debugger栏可以通过下拉菜单选择:

9.jpg


Tips:

OSBDM为S08/S12(X)/MagniV S12Z系列Demo板的板载调试器(S32DS不支持);

OSJTAG为老的MPC56xx系列MCU TRK系列Demo板的板载调试器;

USB Multilink/FX是可以支持所有系列MCU的调试器(使用不同的Firmware和调试接口);

Cyclone为NXP/Freescale推荐的第三方量产Flash编程器,其也可以用作一般调试器;

TraceLink为PEMicro推出的带有代码跟踪(trace)的调试器;

OpenSDA 为KEA/S32K系列MCU以及MPC57xx系列MCU FRDM/Devkit系列Demo板的板载调试器。


1.2 Segger J-Link调试器


J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真,与IAR,Keil等编译环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。

10.jpg


由于S32DS for ARM可以支持基于ARM Cortex M系列内核的KEA和S32K系列MCU的软件开发和调试,所以也提供方了对Segger J-Link调试器的支持。其在S32DS工程的调试配置界面中Debugger的配置界面如下:

11.jpg

Tips:由于S32K系列MCU使用的是最新的ARMv7-M指令集的Cortex-M4F内核、所以必须购买J-Link V9以上版本的J-link并下载安装最新版本的J-link上位机软件(JLINK V6.00d以上版本)才可以支持。


J-LINK可以支持SWD和JTAG两种调试协议,具体使用哪一种协议需要配置,当然也取决于具体的MCU硬件是否正常该调试协议,比如大多数ARM Cortex M0/M0+内核的MCU(比如KEA/S32K116/8)就近支持SWD协议,而ARM Cortex M3/M4内核的MCU(比如S32K144)则既支持SWD也支持JTAG协议。


2. 基于PEMicro调试器的S32DS Attach调试方法与步骤


2.1 新建应用工程用于测试 PEMicro调试器工具链


Step1:新建一个S32DS应用工程:File-->New-->S32Ds Application Project:

12.jpg

Step2:输入工程名,选择正确的MCU part number和工具链:

13.jpg


Step3:选择MCU内核和编译器参数配置以及Debugger--PEMicro GDB server:

14.jpg

Tips:对于KEA/S32K系列MCU Debugger可以选择PEMicro GDB Server或者Segger J-Link GDB server;

15.jpg

Step4:编译链接生成用于测试的编译结果--elf文件:

16.jpg

Tips:如果工程使用了SDK和Processor Expert,在编译之前需要点击Processor Expert组件窗口的代码生成,否则编译时会提示某些文件找不到的错位。


Step5:选择工程右键-->Debug As-->Debug Configuration..打开工程的调试配置选项:

17.jpg

在调试配置选项中选择GDB PEMicro Interface Debugging调试目标,切换到Debugger栏,选择正确的实际使用的Debugger调试器Interface类型(这里使用的是FRDM-S32K144板载的OpenSDA),如果连接OK,在Port:窗口会显示相应的USB设备和ID号,然后,选择Debug即可下载进入调试界面:

18.jpg

Tips:在这一步,如果选择了正确的Interface后,Port窗口没有显示相应的USB设备和ID号,则需要检查:


A. 实际使用的调试器Debugger的USB接口是否正确连接到了PC电脑?

B. 相应的调试器Debugger驱动是否正确安装?如果驱动程序没有安装好,在我的电脑-->属性-->设备管理器中的USB设备中将有相应的端口为感叹号(!)或者问号(?)提示。


如下图,表示该OpenSAD调试器的配置和连接是正确可以正常工作的:

19.jpg


2.2 在工程的调试配置选项中配置使能Attach调试功能


具体方法如下:


Step1:在main窗口,C/C++ Application设置要调试的目标工程的elf文件(这里我以Keil MDK编译的一个S32K144的RTX5_Blink的应用工程为例,其他IDE或者S32DS自己编译的应用工程也是可以的):

20.jpg

Tips:

A. 由于我们是调试其他应用工程,不需要对其进行编译链接,所以可以选择Disable auto build,否则每次选择Attach还会编译这个测试工程,浪费时间。


B. 要调试的应用工程必须是本地编译链接的或者与编译链接是具有相同的目录,才能保证elf中的调试信息与源文件路径一一对应。


Step2:在Startup窗口,使能Attach调试:去掉运行时选项(Runtime Options)默认的Run on reset和Set breakpoint at:main,勾选Attach to Running Target:

21.jpg


Step3:添加工程目录:在Source栏下的源文件查找路径(Source Lookup Path),通过添加文件系统路径方式将要调试的应用工程根目录添加到该调试配置:

22.jpg

Tips:一定是工程的根目录并勾选搜索子目录(Search subfolders),这样才能保证源代码文件与调试信息一一对应。


Step4:最后,点击Debug即可进入调试界面,此时可以发现,源代码文件已经与调试信息对应上了。

9.jpg

Tips:刚进入调试界面时,MCU处于运行状态,需要点击暂停才能查看寄存器和变量以及进行其他的调试功能。


3. 基于J-Link调试器的S32DS Attach调试方法与步骤


如果使用J-LINK作为调试器,则方法与上面使用PEMicro的调试器一样,首先需要新建一个基于J-LINK的且MCU part number与目标MCU一致的应用工程,编译链接下载,保证整个J-LINK的下载调试连接是可以正常工作的。

 



Tips:如果新建工程选择的默认调试器为PEMicro,则默认在工程Debug Configuration中没有J-LINK的调试目标:

9.jpg


这时可以通过双击GDB SEGGER J-Link Debugging来创建J-LINK的调试目标:

10.jpg

在此基础上,按照以下设置工程的J-LINK调试配置选项以使能记忆J-Link的Attach调试功能:


Step1:在main窗口,C/C++ Application设置要调试的目标工程的elf文件:

10.jpg

Step2:在Startup窗口,使能Attach调试:去掉默认的load executable选项:

12.jpg

Tips:应用工程编译结果elf文件中既包含NVM编程数据/程序代码编译结果,也包含调试信息,默认应用工程的调试目标选项配置时使能下载全部elf信息的,其中前者被下载到目标MCU的NVM(比如Flash和EEPROM)中,而后者被加载到调试器debugger中而非目标MCU的NVM。


这里的两个选项Load symbols就是加载elf文件中的调试信息,而Load executable就是加载elf文件中的编程数据/程序代码,其涉及对目标MCU的NVM操作--擦除、编程和校验。


Step3:添加工程目录:在Source栏下的源文件查找路径(Source Lookup Path),通过添加文件系统路径方式将要调试的应用工程根目录添加到该调试配置:


Tips:一定是工程的根目录并勾选搜索子目录(Search subfolders),这样才能保证源代码文件与调试信息一一对应。


Step4:最后,点击Debug即可进入调试界面,此时可以发现,源代码文件已经与调试信息对应上了。


Tips:刚进入调试界面时,MCU处于运行状态,需要点击暂停才能查看寄存器和变量以及进行其他的调试功能。


总结


使用S32DS的Attach调试功能,可以在不下载改变目标MCU片上NVM且不复位MCU的情况下,非常方便的程序跟踪,定位ug。该方法在对BootLoader与应用工程进行联合调试时,十分有用。

28.jpg

首先,将BootLoader和应用工程的编译结果编程文件S19/HEX/BIN合并为一个,并通过编程器下载到目标MCU(利用本文介绍的方法也可以将调试配置选择Main窗口下的C/C++ application配置为某一编程文件S19/HEX/BIN,并且不再Startup窗口配置使能attach功能,则也可以将相应的编程文件下载到目标MCU);


然后,再依次用attach的方式加载BootLoader工程和应用工程elf文件中的调试信息对其进行调试即可。


Tips:我在调试过程中发现,使用J-LINK作为调试器下载和调试S32K144/KEA时,其默认下载时是按照sector进行擦除的,只擦除和编程应用工程用到的片上NVM,这样的话,可以将BootLoader先下载到NVM中,然后再下载调试应用工程时,是不会影响BootLoader工作的(因为BootLoader工程和应用程序工程的NVM分区时不重叠的,每次复位时首先运行BootLoader,然后自动跳转到应用程序),这样就无需attach的方式了,反而简单不少。

使用PEMicro调试器是也可以设置程序下载是对目标MCU片上NVM的保护,具体方法如下:


在工程的Debug Configuration中,选择GDB PEMicro Interface Debugging的调试目标,在Debugger窗口,点击高级选项(Advanced Option),在高级选项窗口中,勾选Preserver this range(Memory Rang 0..2,最多可以保护三段存储器空间),并输入需要保护的存储器起始地址即可。

46.jpg