《特殊mcu部分实时跟踪--串行线浏览器》由会员分享,可在线阅读,更多相关《特殊mcu部分实时跟踪--串行线浏览器(4页珍藏版)》请在金锄头文库上搜索。
1、旧日好时光MCU调试能力的鼎盛时代是在二十世纪90年代晚期, 当时全在线仿真器 (ICE)非常流行。 这些强大的机器使用复杂的触发器、 过滤器和许多(通常是无限的)硬件断点来提供停止、 运行、 单步调试以及跟踪内存功能。利用速度相对较慢的8051及其它类似元件, 在线仿真器混合使用生产芯片与特殊的、 昂贵的外合 (bond-out) 芯片。 外合芯片要求半导体制造商组建专门的芯片设计团队。 如果让该团队去开发能真正销售给客户的零部件,显然更有价值。通过JTAG端口进行调试随着芯片管脚增多、 总线周期效率的提高、 更多单芯片应用, 特别是更高速度的芯片在市场上出现, ICE便难以跟上发展步伐了。
2、 包括ARM在内的制造商纷纷开始把调试模块置于生产芯片之内。这些模块通过JTAG接口进行访问, 而JTAG接口当时已存在于许多芯片上, 用于板完整性的测试。 如今, 大多数MCU上都存在JTAG。 图1显示了MCBSTM32TM评估板上的KeilTM ULINKTM-ME USB-JTAG适配器。这些调试模块利用硬件断点来提供基本的停止、运行和单步调试。遗憾的是, 当外部访问与内部地址和数据总线之间的联络被切断后, 与跟踪内存相关联的大部分高级ICE调试能力也丧失了。 这一因素再加上一些设备的极高速度, 严重限制了全ICE的使用。 开发人员的调试能力至少倒退十年, 几乎回到了早期使用调试监控器
3、的阶段。为了将内部调试数据带给外部世界,人们提出了多种解决方案, 如仿真器和调试代码等。 这些方案很成功, 但是或多或少会占用CPU时间, 侵入CPU代码空间。 它们通常会占用UART端口。 仿真器的效率很高, 但最终会需要 “环路硬件” 产品来与客户硬件进行接口。 对于较复杂的实时系统, 并不是总能够停止CPU或 “偷” 几个处理周期来检查内部状态。 为了成功调试项目, 开发人员不得不使用一些别出心裁的方法, 而这往往会耗费大量时间, 导致项目延迟、 效率不高、 一些漏洞没有被发现。 因此, 让开发人员迫切需要在可以承受的代价下, 将关于MCU的数据实时导作 者Robert Boys, AR
4、M美国Keil产品经理摘要: 处理器拥有的调试功能对于确保项目的成功完成和维护至关重要。ARM处理器采用许多先进技术来提供调试能力。最新工具是串行线浏览器,它使处理器核心能通过称为“串行线输出”的单线端口发出实时跟踪信息。 本文首先探讨了现有的各种调试模块,然后研究了Cortex处理器如何实施和使用串行线浏览器。串行线浏览器也称为“实时跟踪:SWV”。 ARM利用CoreSight芯片上调试与跟踪技术扩展了ARM7、ARM9和ARM11核心中使用的嵌入式ICE调试模块。CoreSight用在Cortex、ARM9和ARM11处理器中。这些目标彼此密不可分,都是旨在为开发人员提供工具,使他们能够
5、尽可能有效地调试和测试项目。 本文中,我们将回顾这些年来处理器调试能力的兴盛与衰落,以及ARM如何使这一利器重整雄风。我们的重点将是Cortex-M3微处理器中使用的CoreSight的串行线浏览器 (SWV) 组件。它也称为“实时跟踪:SWV”。我们将讨论它的工作机制、为什么它很有用以及如何、在哪里使用它。特殊MCU部分 实时跟踪: 串行线浏览器Information QuarterlyNumber 9, Autumn 200822图1 Keil USB-JTAG adapter on STM32 boardTECHNOLOGY IN-DEPTH出芯片外。 这些数据包括程序流状态改变的程序计
6、数器值、 数据读取和写入, 以及内部寄存器值。ARM为这些问题提供了解决之道。实时跟踪ETMTM1990 年代晚期, ARM开发出了能提供上述关键信息的ETM(嵌入式跟踪宏单元)。 这些数据被输出到4 位、 8 位或16位专用跟踪总线上, 并为特殊的跟踪调试器工具所捕捉。 这一外部工具需要非常快的硬件以ARM核心能够达到的运行速度来捕捉所有数据。 虽然ETM很有效,但是人们需要较低成本的、 无需使用这一昂贵硬件的跟踪信息收集方法。 因此,ETM只是作为一种备选功能提供给半导体制造商, 并非所有ARM设备都具备ETM。CoreSight实时跟踪SWVARM为其Cortex系列使用了一套新的Cor
7、eSight调试宏单元。 CoreSight包括所有调试宏单元, 例如: JTAG调试、ETM, 以及最重要的添加了串行线调试 (SW-DB) 和串行线浏览器 (SWV)。并不是全部Cortex MCU都具有ETM, 但是它们全都具有JTAG和SW-DB调试技术。 目前Luminary、 STMicroelectronics已经开始提供带有SWV的Cortex处理器, NXP很快也会提供。串行线调试(SW-DB)的调试能力与JTAG相同, 但是管脚更少。 SW-DB仅使用2根线来连接CoreSight调试模块, 而JTAG则要使用4到7根线。 因此, SW-DB可以使用更小的连接器。 SW-D
8、B和JTAG提供停止、 运行和单步调试、 最多8个硬件断点及4个观察点。 这两种调试方法均能使用Keil ULINK2 USB-JTAG适配器。 串行线浏览器(SWV)与1位ETM端口相似。 它只需要一个管脚, 这个管脚在MCU上称为串行线输出 (SWO)。 这三个管脚(SW-DB和SWO)与JTAG端口共享一个连接器。 图2显示了典型Cortex处理器的各种组件。串行线浏览器的作用串行线浏览器提供下列类型的信息:1) 程序计数器值2) 数据读写周期3) 变量值和外设值4) 事件计数器5) 异常进入和返回6) 时间戳和所用的CPU周期不需要在用户程序中写入调试代码, 也不需要占用处理周期。 用
9、户代码也可以将数据送出SWO。SW V与ETM之间的主要区别在于ETM具有更高的数据吞吐率; 而SWV可以没有昂贵的硬件工具的情况下, 提供适量的跟踪信息。 RealView MDK-ARM(微控制器开发套件)提供SWV支持,不另收费。 MDK使用Keil的Vision3作为其IDE(集成开发环境)。 详情请访问。变量Vision可以包括图形在内的多种熟图 2 Cortex Debugging Diagram图 3 Keil Vision Logic AnalyzerInformation QuarterlyNumber 9, Autumn 200823TECHNOLOGY IN-DEPTHI
10、nformation QuarterlyNumber 9, Autumn 200824TECHNOLOGY IN-DEPTH悉格式实时显示变量, 没有任何侵入性。SWV宏单元将变量传输出SWO线, 除上述 3 根串行管脚外, 它不需要任何CPU周期或资源。 全局变量、 静态变量和结构均可容易地得到显示。 而对于局部变量, 首先必须将它们转换为全局变量或静态变量, 然后才能查看它们。 下一页上的图3显示了A/D转换器的实时输出: AD_DbgVal和Systick句柄。外设寄存器可以实时提取外设寄存器的值。只要全局变量或静态变量对一个外设地址执行读或写操作, 便会创建一个跟踪事件, 图3所示的图
11、形中或 “观察与内存” 窗口中可以显示该跟踪事件。程序计数器 (PC) 样本可以显示程序计数器的值。 当程序流程发生改变、 进行概貌分析、 确定CPU可能是在哪里陷入了死循环和哪个指令造成死循环时, 这个功能会很有用。 概貌分析可以指出CPU正在哪里执行任务。 很显然,ARM核心的运行速度非常快, 单根串行线端口无法提供每个程序的计数器值。 但给出性能分析的统计样本是可能的, 它对于概貌分析也是足够的。 下一页上的图4显示了PC值以及CPU周期中的时间戳和秒数。 数据读写帧可以显示读写数据帧, 给出责任指令的地址、所传输的数据值、 数据地址以及核心周期数与秒数中的时间戳。 下一页上的图5显示了
12、一系列数据写入及其属性。 数据读取的显示与此相似。请注意, 图5中的小过滤器窗口显示了可以显示的事件类型。ITM: 仪器跟踪宏单元用户程序可以使用ITM将数据写出SWO端口。 该数据可以显示在跟踪记录窗口中或串行线浏览器窗口中。以下所示为写入ITM的用户代码示例。 有时用“printf debugging” 指代这种代码。 这种方法对用户程序只有轻微的侵入性影响。图4显示了三条ITM记录。 图6显示了串行线浏览器窗口中显示的用户代码结果。跟踪事件计数器受跟踪的时间类型如下:图 4 PC Samples & ITM Trace Records图 5 Data Writes & Exception
13、 examples图 6 Serial Wire Viewer WindowInformation QuarterlyNumber 9, Autumn 200825TECHNOLOGY IN-DEPTH1) CPU时钟周期数(32位)2) 折叠指令计数(8位)3) 指令周期数(8位)4) 处理器睡眠周期数(8位)5) 中断处理所花的总周期数(8位)6) 加载/存储操作所花的总周期数 (8位)这些计数器之一每翻滚一次, 便会产生一个事件, 并将该事件馈入事件计数器窗口。 这些计数器可以用来测量总消逝时间, 提供关于系统性能的信息, 以及用来完成许多其它任务。图7显示了这些计数器的翻滚次数。点击
14、0” 可将这些计数器清零。异常跟踪对话框SWV会捕捉各种异常返回和退出。SWV会给这些异常标上时间戳, 并显示异常号码。 图8显示了异常跟踪窗口, 其中SysTick (15) 发生了921次。 关于异常的信息将显示在此窗口中, 并且还会重复显示在跟踪记录窗口中, 如图5所示, 其中显示了异常0和15。跟踪的价值无论是ETM还是SWV, 跟踪均显著增强了调试能力。 大项目中可能要花上数小时、 数天甚至数周才能发现的问题, 利用跟踪经常只需要这些时间的一个零头就能发现。对于很长时间后才看到后果的代码缺陷, 或者对于范围改变后系统状态消失的情形, 跟踪特别有用。 通常而言, 使用跟踪可以帮助发现代
15、码缺陷而无需停止程序运行。 利用高水平跟踪可以发现的问题类型如下:1) 指针问题。2) 非法指令和数据异常中止 (例如错位 写等) 。3) 代码覆盖写入闪存、 意外写入 外设寄存器 (SFR)、 堆栈损坏。4) 数据出界; 变量和阵列未初始化。5) 堆栈溢出; 什么导致堆栈变得过大?6) 程序逃逸: 程序不知所踪, 需要知道 是什么指令导致这一情况。7) 通信协议和时序问题; 系统时序问 题。8) 程序的时间都花在什么地方? 概貌分 析器 (Profile Analyzer ) 可以告诉您。此外, 还可以实时查看一些感兴趣的项目, 例如: 变量内容、 RTOS的状态(任务号码等)、 信号及其它
16、信息, 以发送信息给开发人员。如何试用?您只需要准备一块带有STM32或Luminary处理器的评估板、 一个Keil ULINK2(或ME)与一份RealView MDK拷贝。 MDK已包含了数个范例, 所有代码都将利用这些工具的评估版来编译。结论由于采用ARM CoreSight技术和Keil的Vision3, 串行线浏览器提供了一种从MCU内部获取信息的低成本方法。 串行线浏览器性能优越、 易于使用且成本低廉。虽然寻找顽固恶劣的缺陷等重型跟踪调试仍会使用ETM, 但在使用跟踪调试排查一些偶发问题方面, 则非串行线浏览器莫属。图 7 Event Counters图 8 Exception Trace Window