汽车电子expert成长之路

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

S32DS IDE使用Tips--应用工程调试常见问题(FAQ)答疑

0
阅读(1458) 评论(0)

作者按:本文介绍的FAQ适用于S32DS IDE,包括各版本的S32DS for ARM/Power/Vision. 问题和解决方法是在不断使用中积累的,本文仅作“抛砖引玉”,MCU调试之路慢慢长远,希望读者攻城狮们能够在日常工作总,多总结、思考--“集腋成裘”,最终使用S32DS IDE得心应手,达到事半功倍,“笑傲江湖”,轻松应对一切bug。

内容提要

引言

1. 如何启动多核调试?

2. 如何下载和调试非S32DS IDE工程的S19/HEX/BIN/elf编译结果?

3.如何查看QorivvaMPC57xx和S32R系列MCU的e200Zx系列CPU内核的特殊寄存器(SPR)?

4. 如何查看反汇编代码和执行汇编指令调试?

5. 如何在程序下载时保护特定NVM(Flash/EEE)地址内容不被擦除?

6. 如何加载不同的Flash算法文件编程Data-Flash和外部QSPI Flash?

7. 如何attach调试定位bug?

8.如何导出储存器中的编程结果到S19/HEX/BIN文件?

9.如何高效地设置和管理应用程序调试断点?

10.如何查看全局变量?

11.如何在调试时动态监测变量变化?

12. 如何找到S32DS IDE的帮助文档?

总结


引言


所谓“工欲善其事,必先利其器也”,在上一篇文章--《S32DS使用Tips--SDK使用常见问题(FAQ)答疑》(直接点击文章标题即可跳转阅读),我分享了几个S32DSIDE中SDK和ProcessorExpert使用相关的常见问题,为了进一步帮助大家使用好S32DSIDE,本文将对S32DS IDE调试应用工程时常见的问题和解决方法进行总结归纳,希望对大家有所启发和帮助。


1. 如何启动多核调试?


目前S32DS IDE支持的NXP Qorivva MPC57xx和S32R系列以及MAC57D5xx(Halo)和S32V系列的大多数part都是多核(双核或者三核甚至更多)CPU的MCU,包括下一代的S32K2xx和其他S32系列也会加入多核的part,所以S32DS IDE自然要支持多核调试。


下面以S32R274为例,介绍如何在S32DS for Power中启动多核调试:


首先,创建一个多核应用程序,并成功编译;


然后,选中任意内核的应用工程,右键-->Debug Configuration,或者如下点击下图中的快捷菜单,选择Debug Configuration,打开工程的调试配置界面:

10.jpg

在调试界面的左侧,点击打开Launch Group,选择不同编译目标对应多核调试目标,然后点击Debug,即可启动多核调试:

11.jpg

当所有内核调试启动完成后,调试界面如下,会自动在每个核的main()函数最开始默认的断点处停下,选中左上角Debug窗口中不同的内核调试目标即可切换到相应的内核进行应用程序的调试和断点设置,以及查看寄存器和变量;

12.jpg


Tips:多核调试时,各内核程序的运行和控制时相互独立的,可以同时让其中的多个内核运行/暂停;但一个时刻只能查看一个内核的调试信息;


Tips:对于多核MCU来说,不能单独调试非boot_core的内核应用程序,比如单独仅下载并调试S32R274的Z7_0和Z7_1内核;因为每次MCU复位后,都是从boot_core开始运行的,如果boot_core都没有启动,其他内核根本无法工作;


2. 如何下载和调试非S32DS IDE工程的S19/HEX/BIN/elf编译结果?


可以使用S32DS IDE的Flash from file工具下载非S32DS IDE工程的S19/HEX/BIN/elf编译结果:从菜单Run-->Flash from file即可启动相应的软件界面:

13.jpg

具体方法和步骤请参考本博客之前的文章(直接点击文章标题即可跳转阅读):

S32DS 使用 tips--使用Flash from file下载S19或elf文件》;

如果还需调试非S32DS IDE工程的elf编译结果,可以使用S32DS的Attach功能,具体请参考本公众号之前的文章(直接点击文章标题即可跳转阅读):

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


3.如何查看Qorivva MPC57xx和S32R系列MCU的e200Zx系列CPU内核的特殊寄存器(SPR)?


在调试Qorivva MPC57xx和S32R系列MCU时,有时跟踪问题往往需要查看e200Zx系列CPU内核的特殊寄存器(SPR),默认的S32DS for Power的调试界面的Register窗口仅列出了内核的通用寄存器,想要查看特殊寄存器(SPR),需要借助SPR Register窗口,其打开方法如下:


选择菜单Windows-->Show View-->Others..:

14.jpg

在打开的Show View窗口中选择Debug-->SPR Registers:

15.jpg

即可打开SPR Register窗口,在其中点击要查看的特殊寄存器名字,即可显示当前该SPR的值

16.jpg


4. 如何查看反汇编代码和执行汇编指令调试?


在调试时,查看应用程序的反汇编代码并进行汇编指令级的调试,可以帮助我们定位和解决问题,在默认的S32DS IDE调试界面中通常是没有打开反汇编窗口的,为C代码级的调试,可以通过点击选中(按下)下图中的调试快捷图标i-->打开应用程序的反汇编窗口--Disassembly窗口,同时也使能了汇编指令单步调试:

17.jpg


Tips:请注意,如果有时你发现在调试界面的C源代码窗口中查看调试控制(单步,进入/跳出函数)很慢的话,很可能的原因就是启动了汇编指令单步调试功能,请double check上图中的调试快捷图标i-->是否被点击选中(按下)。


5. 如何在程序下载时保护特定NVM(Flash/EEE)地址内容不被擦除?


在开发bootloader或者进行一些标定测试时,常常希望当前的应用工程下载不影响其占用地址之外的其他NVM(Flash/EEE)地址中存储的Bootloader/APP或者标定数据,这一需求可以通过设置存储器保护功能实现:


具体方法如下:


在应用工程的调试配置(debug confguration)界面中选择调试目标,在其Debugger一栏中,选择点击Advanced Options,打开调试器的高级选项窗口:

10.jpg

在弹出的调试器的高级选项窗口中,勾选Preserve this range(Memory Range 0/1/2),并输入正确的相应保护的起始地址(From)和结束地址(To)即可,比如下图即设置保护MPC5744P 地址0xF80000开始的64KB Code-Flash空间:

19.jpg


Tips:通过此种方法最多可以保护3段NVM地址空间,当然为了保证吃功能正常工作,设置的起始地址必须与Flash擦除最小单元的地址对齐,比如S32K的P-Flash Sector size为4KB,则地址必须是4KB的整数倍;而Qorivva MPC57xx和S32R系列MCU的Code-Flash Block size可以是16KB/32KB/64KB/128/KB/256KB,那此处的保护地址范围也必须为其整数倍;

同时为了保证当前应用工程下载成功,必须保证要保护的存储器地址空间不能与当前应用工程编译结果存在overlay或者有across Flash sector/block的情况存在;


6. 如何加载不同的Flash算法文件编程Data-Flash和外部QSPI Flash?


默认的S32DS IDE应用工程调试时使用的是其Code-Flash算法文件:

20.jpg

若要对其Data-Flash或者外部QSPI Flash(支持的MCU才会有)进行编程,需要在调试器高级选项中勾选Use Alternative Algorithm,浏览并加载相应的算法文件,比如下图为加载并使用MPC5744P的Data-Flash算法文件对其Data-Flash进行编程的设置:

21.jpg


Tips:这些Data-Flash或者QSPI Flash算法文件存放在S32DS IDE的安装目录下,比如MPC5744P相关的Flash算法.pcp文件如下:

22.jpg


Tips:不同cut版本的芯片,其Flash算法文件可能会存在差异,请留意具体的MCU芯片的errata勘误表和datasheet数据手册说明。


7. 如何attach调试定位bug?


请参考之前的文章(直接点击文章标题即可跳转阅读):


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


8.如何导出储存器中的编程结果到S19/HEX/BIN文件?


在某些情况下,出现MCU工作异常,为了排除程序代码被意外修改导致的非法指令原因,可以选择attach问题目标MCU,在调试界面的memory窗口,使用其导出存储器(export memory)功能将其Flash内容读出,然后与下载的原始工程编译结果进行对比:


具体方法如下:


点击Memory窗口的导出存储器(export memory)功能图标:

23.jpg

在打开的导出存储器(export memory)窗口中,选择要导出保存的文件格式(Format,支持S19文件/SRecode, BIN文件/RAW binary和文本文件/Plain text),起始地址(Start address)、结束地址(End Address)和保存路径和文件名(File name)即可:

24.jpg

点击OK,即可导出Flash中的内容:

25.jpg


Tips:此方法可以导出一切可以在memory窗口中查看的合法地址内容,包括Code/Data Flash、EEE、SRAM以及外设寄存器值;


9.如何高效地设置和管理应用程序调试断点?


在S32DS IDE的调试界面的Breakpoints窗口中列出了当前调试应用工程的所有断点,可以在该窗口中快速使能(勾选),disable(去勾选)或者移除所有断点,并且点击某一断点即可快速跳转到相应的C代码源文件位置:

26.jpg

因为调试界面没有工程管理器(Project Expleror)窗口,不方便切换和查看文件,所以若想要在某一C源文件中设置断点,可以单击下图中的快捷图标,打开Open Perspective,在C/C++视窗界面和Debug界面之间相互切换:

27.jpg

在C/C++视窗界面的工程管理器(Project Expleror)窗口中可以方便快捷的查到到工程源文件,在想要设置断点的源代码行的最左边点击即可设置断点,断点设置成功后,会有一个小勾标识,然后在切换回Debug调试界面:

28.jpg


Tips:有时会遇到某些代码处不能设置断点的情况,原因可能有以下两点:


  • 1. 工程的断点设置数量超过了其支持的最大硬件断点数(S32K14xx最多为4个,KEA系列最多为2个,MPC57xx系列每个内核最多4个),建议及时清除不再需要的断点设置;

  • 2. 该行代码被编译器优化掉了,为了保证debug时,断点设置的灵活性和可靠性,建议将工程的调试编译目标的编译器优化选项配置为最低优化等级(-0,无优化):

29.jpg



10.如何查看全局变量?


在S32DS IDE的调试界面中,查看全局变量有以下有两种方法:


方法1:在C源代码中选中想要查看的全局变量,右键-->Add Watch Expression..即可打开全局变量查看窗口(Expressions)并添加相应的全局变量:

30.jpg


方法2:用户也可以在全局变量查看窗口(Expressions)中通过Add new expression添加:

31.jpg


11.如何在调试时动态监测变量变化?


变量动态监测要求在调试时,点击让CPU全速运行的过程中,能够观察到变量的动态变化。目前只有S32DS for ARM v2.0及更高版本的IDE通过PEMicro提供的Real Time Expressions插件可以支持。


其可以通过前面介绍的,选择菜单Windows-->Show View-->Others..:

32.jpg

在打开的Show View窗口中选择PEMicro-->Real Time Expressions打开:

33.jpg

Real Time Expressions窗口中,可以通过Add new expression添加想要实时查看的变量(局部变量和全局变量均可):


然后点击选中(按下)Real Time Expressions窗口右上角的实时更新开关图标,全速运行调试应用工程,即可实时查看变量变化了:

34.jpg

在未选中(按下)Real Time Expressions窗口右上角的实时更新开关图标时,变量值跟Expression窗口一样,在程序全速运行时不更新,只有当出现遇到断点停下来后才会更新其窗口的变量值。


12. 如何找到S32DS IDE的帮助文档?


其实,所有NXP的MCU软件开发IDE(包括之前Freescale的CodeWarrior IDE, S32DS for ARM/Power/Vision IDE)都集成了丰富的帮助文档,供大家参考和学习,其启动方法如下:


点击菜单Help-->Help Contents,即可启动S32DS IDE帮助文档浏览器:

35.jpg


在S32DS IDE帮助文档浏览器中,大家可以通过搜索关键词或者浏览不同的主题目录来快速查找相关问题和技术帮助文档,十分方便易用,强烈推荐大家使用:

36.jpg


总结


以上是我自己在使用S32DSIDE的过程遇到的一些问题以及经常有用户向我咨询的关于S32DS IDE调试应用工程时遇到的常见问题总结和归纳,关于更多S3DS IDE使用的FAQ,强烈推荐大家浏览NXP官方的community社区相关帖子:


  • S32DS for Power community 社区链接:

https://community.nxp.com/docs/DOC-335301

37.jpg

  • S32DS for ARM community 社区链接:

https://community.nxp.com/docs/DOC-335302

38.jpg

  • S32DS for Vision community 社区链接:

https://community.nxp.com/docs/DOC-335300

39.jpg


Tips:在NXP的community社区的S32DS板块,有强大的专业工程师团队为与解答S32DS IDE使用相关的技术问题,也许你遇到的问题,已经有人遇到过并被解决了。该community社区面向全球的用户,其中的问题和回答24小时更新,所以很多问题和回答都是英文的,请关注,留意!


Tips使用NXP官网注册账号登陆该community社区后,关注某一技术版块之后,可以订阅相关技术版块的问题邮件通知,这样可以方便大家跟踪相关技术问题和community社区技术问题动态。