use*_*365 4 embedded stm32 openocd
STM32F4 发现(Cortex-M4)有 ETB,一个存储指令跟踪的缓冲区。如何使用 OpenOCD 和片上 st-link 调试器从 ETB 中提取跟踪?
我对 SWO/SWD 有点困惑。我应该使用什么?另外,我是否需要任何额外的硬件来提取跟踪?
谢谢
恐怕我从未听说过 STM32F4在已实现的ARM 内核子集中 及其 CoreSight 功能中 包含嵌入式跟踪缓冲区 (ETB)。我认为这是因为 ETB 是一个可选功能,ST 决定不在其 STM32F4 控制器和它们嵌入的 ARM 内核中配置/实现这个 ETB 选项。
查了一下STM32F4xx家族上层代表的编程/参考手册和datasheet,没有找到关于ETB的内容,似乎证实了这个假设。
现在,如果想从 MCU 中传输跟踪数据,ETB 并不是唯一的选择:
STM32F4 控制器都有一个指令跟踪宏单元 (ITM),它可以在数据观察点/跟踪 (DWT)单元。您可以使用 ITM
printf())检测应用程序ITM 可通过SWO引脚使用,使用任何适配器硬件,如任何版本的 ST-Link、j-Link、uLink-* 等。它是一个合适的跟踪接口,因为它不会在断点处停止 CPU 工作,因此不会进行检查t 破坏系统的实时属性。
许多 STM32F4 控制器(AFAIK,具有 >= 100 个引脚的控制器)包括一个嵌入式跟踪宏单元 (ETM),它能够跟踪程序计数器 (PC) 和每个CPU 周期的数据,因此您可以使用它来跟踪整个控制流(和数据流)的控制器,也不会在任何断点处停止它。
要跟踪的大量数据(确保您有一个空闲的 USB3 端口...)只能通过 GPIOE 组周围的同步端口接口以有用的方式传送(备用功能 TRACECLK+TRACED0/1/2/3 => 总共 5 个引脚),它连接到ETM 旁边的跟踪端口接口单元 (TPIU)。
为了使用这项技术,您需要更昂贵的调试适配器变体,如 j-Trace、uLink-Pro 或 Lauterbach。我所知道的最便宜的支持 ETM 的适配器(虽然还没有使用过)是 PDQlogic 的 QTrace,起价约为 379 英镑。其他的售价约为 1-4 k£/k€/k$。
您的问题听起来告诉我,您可能刚刚开始对 STM32 进行编程。因此,我建议您购买内置 ST-Link 的开发板。这是获得(首先运行 SWD 调试,然后)运行 SWO 跟踪的最便宜的解决方案。Atollic 博客有一个很好的介绍如何快速做到这一点。