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系列单片机,想要最终实现低功耗,除了硬件本身支持之外,合理的代码也是很重要的。通过不断的调试,我们可以更加准确的把握这一系列的单片机,也可以掌握很多的调试技巧,希望以后有更多的技巧分享给大家。
科瑞方型电感传感器在电梯开关门中的应用解析
Facebook雄风不再:在美访问量被Reddit超越
三星Galaxy S21+真机曝光:屏幕效果拉满 四边框几乎等宽
东芝收购案已通过中国审批
高交会5G路线感知科技改变世界
基于IAR开发EFM32单片机的过程及技巧
OV和ODM厂商抢滩印度实况 水电设施如20年多前的深圳周边
富士康对外发布两款全新自主开发的电动车方案
大数据的发展必然会推动人工智能领域的发展
北航无人直升机四机编队顺利完成 单机负载40公斤可飞2小时
水牙线什么牌子好 那些口碑极佳的大品牌
scikit-learn的操作流程几一体化实现的优势
酷睿处理器开头的i5和i9是什么意思
基于LM5017的反相升降压电路支持负电源
采用条码技术提高ERP管理系统应用效率的设计方案介绍
三菱FX(Q)系列PLC连接CHNet-FX与组态王以太网通信
IBM数据本地化方案助力跨国企业实现端到端的数据安全
广和通5G IoT创新成果闪耀MWC Las Vegas 2023
石头扫地机器人T6怎么样 值不值得买
安科瑞电力监控系统在林芝机场的应用