【技术大神】IAR调试技巧及问题解决

2016-09-20 技术大神活动文章

SILICON LABS的EFM32是基于ARM Cortex-M内核的MCU,它通过强大的内核、多样的时钟以及多种运行模式把效率和功耗很好的结合在一起,因此在低功耗领域有很好的应用。


俗话说“工欲善其事、必先利其器”,为了能更好的开发ARM系单片机EFM32,熟练掌握一个或者多个IDE是必须的。IAR的调试器、编译器以及汇编器同时集成在一个IDE中,共同来开发和调试应用程序,这样的集成环境可以带来很多好处,比如:调试过程中可以进行代码编辑。在一个调试过程中,你可以直接在被调试的源代码中进行修改,修改的代码可以在程序重新编译后起作用。以下分享5部分的内容,是笔者应用IAR开发EFM32过程中的一些经验积累,希望能对看到文章的人有一定的作用。


1)关于Run to(在工程中Project>Options>Debugger>Setup>Run to)
如下图:




默认工程Run to的内容是main,这个选项指定了程序调试的起点,注意这里写的是程序调试的起点并不是程序的起点,而且我们需要明白main不是程序的起点,编译器把一些初始化工作放在了main之前,比如全局变量的初始化。那么我们调试的时候也可以输入其它的调试起点,我们可以指定程序中IAR识别的任意标号或者函数名称。


2)关于在反汇编窗口和内存窗口中快速定位函数位置和变量位置
我们经常需要在Disassembly窗口中找到指定函数的位置,或者需要在Memory窗口中找到指定变量的位置,一般情况下选中函数名称然后把函数名称拖放到Disassembly窗口,相关函数就会显示在Disassembly窗口中,也可以把变量名称用相同的操作显示在Memory窗口中。


3)单步调试速度缓慢的问题
我们在单步调试过程中如果发现速度缓慢,那么以下的几点需要引起我们的注意:

如果使用硬件仿真系统,我们需要为单步调试留下足够的硬件断点,在调试中的单步运行通常是用断点来实现的,通过把断点设置在下一个语句后,来完成单步调试的功能。硬件的断点数量是有限的,如果没有可用的硬件断点,调试器就会在每个汇编指令处停止一下,这样完成一条完整的语句的所有汇编代码越多时间就越长。


在Trace和Function Profiling窗口中使用Enable/Disable按钮关闭数据跟踪功能。因为在每个单步之后要收集这些跟踪的数据,所以数据跟踪可能会降低单步的速度。需要注意的是,紧紧关闭相关的窗口是不能关闭数据跟踪功能的,必须通过Enable/Disable按钮来完成。


只打开有限数量的SFR寄存器窗口,这可以通过2种方法实现。一种是通过在Watch窗口中手动输入SFR寄存器的名字;另一种是创建自定义的特殊功能寄存器组,操作步骤如下,Tools>Options>Register Filter>Use register filter如下图:





选择New Group




把关心的SFR放到组中


如果不需要Memory和Symbolic Memory窗口,关闭它们,因为在每个单步之后要读出这些内存数据。


如果不需要Watch,Live Watch,Locals,Statics窗口,关闭它们,原因同上。


关闭Stack窗口和相关的设置,Tools>Options>Stack,去掉Enable graphical stack display and stack usage tracking的选择,如下图:



如果可能,提高调试器和目标板的通讯速度。


4)关于Call Stack(在工程中View>Call Stack)


如下图:


IAR集成环境产生大量的支持信息,这允许调试过程中在没有运行损失的情况下显示完整的函数调用链。这通常会帮助我们确定目前函数的上下文,跟踪变量和参数中的不正确值的来源从而定位出现的问题。


5)EFM_ASSERT宏的合理应用
EFM32的CMSIS库中有一个宏被大量的应用,它的名字叫EFM_ASSERT。这个宏应用了2个参数,一个是__FILE__,一个是__LINE__,这在IAR中分别表示文件名和文件内的行号。这2个参数可以直接告诉我们出现问题的文件和所在的行。


以下通过一个具体的EFM32代码来看看以上提到的几点的应用。



为了演示gpioSetup内部的问题,我们可以把程序调试的起点直接设置到gpioSetup,如下图:




然后全速运行程序,发现程序停在了assertEFM函数内部,通过View>Locals,如下图:




可以看到问题出在em_gpio.c的270行,该行正是GPIO_PinModeSet函数的第一个语句。
我们再通过View>Call Stack,如下图:




可以快速的定位到问题出在以下位置,如下图:




作为主推低功耗的EFM32系列单片机,想要最终实现低功耗,除了硬件本身支持之外,合理的代码也是很重要的。通过不断的调试,我们可以更加准确的把握这一系列的单片机,也可以掌握很多的调试技巧,希望以后有更多的技巧分享给大家。


作者:BYGT


看到这里您是否又有项目灵感需实现,点击下面开发软件帮你忙。

Silicon Labs Simplicity Studio平台开发工具

相关元件供应 查看更多>以下元器件世强均有代理,采购服务热线:40088-73266

EFM32ZG110F32-QFN24 SILICON LABS 库存93037 购买 询价

EFM32ZG210F32-QFN32 SILICON LABS 库存36371 购买 询价

EFM32G232F64G-E-QFP64R SILICON LABS 库存30000 购买 询价

EFM32TG210F32-QFN32 SILICON LABS 库存24250 购买 询价

EFM32ZG222F32-QFP48 SILICON LABS 库存19367 购买 询价

EFM32JG1B200F128GM48-C0 SILICON LABS 库存18402 购买 询价

EFM32TG222F32-QFP48 SILICON LABS 库存16014 购买 询价

EFM32G232F64-QFP64 SILICON LABS 库存14992 购买 询价

EFM32PG1B100F256GM32-C0R SILICON LABS 库存12500 购买 询价

EFM32HG309F64G-B-QFN24R SILICON LABS 库存12000 购买 询价

  • +1 赞(0)
  • 收藏

评论

登录   |    立即注册

提交评论

最新评论

  • 134******99 Lv4 . 资深工程师 2018-06-07
    好东西,学习了!!!!
  • IT2020w Lv3 . 高级工程师 2018-06-05
    这个比较有用,尤其对初学者,意义非常大
  • 海绵宝宝 Lv6 . 高级专家 2018-05-28
    实用
  • Ranger Lv4 . 资深工程师 2018-05-26
    不错不错
  • 三3三 Lv8 . 研究员 2018-05-25
    学习学习
  • OutstandingEngineer Lv4 . 资深工程师 2018-05-24
    说的很细,不错。
没有更多评论了
有问题?向百人技术专家提问
我要提问

400-887-3266(工作日 9:00-18:00)

service@sekorm.com

世强元件电商
最好的电子研发服务平台

  • 领先国内半年新元件/新技术/新方案
  • 全品类覆盖数百个原厂资料
  • 正品低价/供货保障
  • 大量现货,支持快速购买
下载世强元件电商APP
工程师创新研发的神器
知、选、研、用一站式服务

搞研发 找元件
上世强元件电商

我的资料
我的消息
我的