调试嵌入式软件是我最不喜欢的活动,但不幸的是它是一个必要的恶魔。值得庆幸的是,技术和工具链创新的进步带来了大量技术,可以大大加快调试过程。让我们来看看其中的一些,从传统的断点调试开始,再到更高级的仪器跟踪技术。
1 -传统的断点调试
每个开发人员都熟悉传统的调试技术,即设置断点,执行代码,然后在监视寄存器和变量值的同时逐步执行代码。断点调试是一种我认为比其他技术更常用的技术。然而,这令人沮丧,因为断点调试效率低下并且通常会产生次优结果。
那么,为什么经常使用断点呢?主要原因似乎是因为断点易于使用,易于访问,开发人员乐观地认为断点是工作的正确工具。乐观主义需要磨练。断点有可能破坏系统的实时性能,并且可能会让开发人员陷入无休止的单一步骤,盲目地寻找解决问题的方法。
2 -IDE值绘制
现在几乎所有现代调试器和IDE都允许开发人员监视存储在内存位置中的值,例如变量。开发人员选择内存位置和值刷新率,然后启动调试会话。某些IDE能够监视IDE内置的值,而其他IDE则依赖于使用外部软件。
值监控非常有用,但如果被监控的数据与图形表示相关联,那么它就更有价值。实时绘制数据值对于发现意外更改或验证是否生成特定波形非常有用。以三相BLDC电机为例。开发人员可能希望监控每个电机支路上的电流和电压,这需要生成非常特定的波形以驱动电机。绘制每个电机支路上的电压和电流可以使开发人员实时查看正在发生的情况。
3 -重新启动 printf 到SWO
在更高端的ARM Cortex-M部件上,例如M3/M4,为开发人员提供了额外的调试功能,称为串行线查看器(SWV)。除串行线输出(SWO)外,SWV还包括标准串行线调试器。 SWO可用于执行非常酷的操作,例如检索程序计数器,事件计数器和跟踪数据等等。开发人员可以自定义他们希望通过SWO传输的信息。
许多开发人员设置 printf 以从其嵌入式系统获取调试信息。开发人员可以使用SWO通过调试器重新路由 printf 信息,而不是在微控制器上使用串行引脚。以这种方式使用调试器可以节省对专用串行接口的需求,消除UART或USB设备的开发时间,并且效率更高。最初在应用程序中使用的开销现在通过SWO和调试硬件卸载,这节省了应用程序代码本来使用的宝贵时钟周期。
4 -RTOS跟踪
尝试透过RTOS所做的面纱可能非常具有挑战性。开发人员不希望干扰实时系统性能,但仍需要一些方法来理解系统的行为。 Blinky LED通常是最常用的技巧,但最近的跟踪工具为开发人员的工具箱添加了一项惊人的技术。存在免费和商用的RTOS跟踪工具,例如TraceX,SystemView和Tracealyzer等。
跟踪工具允许开发人员分析RTOS何时空闲以及何时进入和退出每个任务。开发人员可以监视系统异常,响应时间,执行时间以及正确开发嵌入式系统所需的许多其他关键细节。 RTOS跟踪工具中最酷的功能是能够绘制系统中发生的情况。实时或在记录的日志中查看和监视时序图可以帮助开发人员获得系统按预期工作的置信度,或帮助他们发现本来需要花费大量时间才能发现的小问题。
5 -使用指令跟踪技术(ETM/ETB/ETM)
有时开发人员面临调试问题,这些问题处于可以想到的最低级别处理器。存在可以监视处理器执行的各个指令的跟踪技术。在测试和验证软件时,这种低级别跟踪可用于监视分支覆盖。用于指令跟踪的调试器工具与开发人员用于串行线查看的工具不同,通常会花费更多。
结束思路
过去几年,调试工具和技术发展迅速,特别是对于高端微控制器。一般来说,工程师是视觉生物,工具供应商正在寻找方法以视觉刺激的方式揭示实时系统中究竟发生了什么。设置调试工具可能需要一些前期时间,但是花费更少的时间进行调试和更多时间设计的潜力值得投入时间。开发人员至少应熟悉可用的不同调试工具和功能,以便在出现问题并需要调试系统时,他们可以选择合适的工具来完成工作。您使用的其他技术是什么帮助工程师更快,更有效地调试他们的系统?
-
PCB打样
+关注
关注
17文章
2968浏览量
21721 -
华强PCB
+关注
关注
8文章
1831浏览量
27781 -
华强pcb线路板打样
+关注
关注
5文章
14629浏览量
43063
发布评论请先 登录
相关推荐
评论