IAR调试EFM32单片机时的一些技巧
4)关于Call Stack(在工程中View>Call Stack)
本文引用地址://m.amcfsurvey.com/article/201812/396197.htm如下图:
![](http://m.amcfsurvey.com/editerupload/201812/fd314cf9bf64f7f3986467de67bda82c.jpg)
IAR集成环境产生大量的支持信息,这允许调试过程中在没有运行损失的情况下显示完整的函数调用链。这通常会帮助我们确定目前函数的上下文,跟踪变量和参数中的不正确值的来源从而定位出现的问题。
5)EFM_ASSERT宏的合理应用
EFM32的CMSIS库中有一个宏被大量的应用,它的名字叫EFM_ASSERT。这个宏应用了2个参数,一个是__FILE__,一个是__LINE__,这在IAR中分别表示文件名和文件内的行号。这2个参数可以直接告诉我们出现问题的文件和所在的行。
以下通过一个具体的EFM32代码来看看以上提到的几点的应用。
![](http://m.amcfsurvey.com/editerupload/201812/b50301fe94fec2bb839b95c5fbbc5c78.jpg)
为了演示gpioSetup内部的问题,我们可以把程序调试的起点直接设置到gpioSetup,如下图:
![](http://m.amcfsurvey.com/editerupload/201812/8a874b47e02e81c8f097d09ac3b46c27.jpg)
然后全速运行程序,发现程序停在了assertEFM函数内部,通过View>Locals,如下图:
![](http://m.amcfsurvey.com/editerupload/201812/9cd57235672ad232afb6cf95afa73d04.jpg)
可以看到问题出在em_gpio.c的270行,该行正是GPIO_PinModeSet函数的第一个语句。
我们再通过View>Call Stack,如下图:
![](https://files.sekorm.com/opt/fileStore/portal/ecnew/editor/new/20160902/1472801888738009837th.jpg)
可以快速的定位到问题出在以下位置,如下图:
![](http://m.amcfsurvey.com/editerupload/201812/f0e1f060d3fc7ba59b576165d30ce1fa.jpg)
作为主推低功耗的EFM32系列单片机,想要最终实现低功耗,除了硬件本身支持之外,合理的代码也是很重要的。通过不断的调试,我们可以更加准确的把握这一系列的单片机,也可以掌握很多的调试技巧,希望以后有更多的技巧分享给大家。
评论