繁体   English   中英

STM32 - 使用数据观察点和跟踪 (DWT) 的危险

[英]STM32 - Dangers of using Data Watchpoint and Trace (DWT)

查看在 STM32F7 上初始化数据观察点和跟踪 (DWT) 所需的代码:

DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;    
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->LAR = 0xC5ACCE55; 
DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;

特别是这一行来解锁对 DWT 寄存器的访问:

DWT->LAR = 0xC5ACCE55; 

这类似于在扣动扳机之前切换安全锁扣。 就像获得一些危险的行动一样。

同时,查看文档我没有发现使用 DWT 的任何阴暗面。 所以

为什么这里需要这组显式的 0xC5ACCE55(与其他子系统不同)? 有什么缺点吗? 危险? 还是真的需要这个安全扣?

PS 我正在使用 DWT 访问DWT->CYCCNT进行性能分析。

CoreSight 文档提供了一些关于锁的需求以及不使用它可能带来的危险的信息。
该信息复制如下。

在复制的文本(如下)中,它说从 CoreSight v3 开始不推荐使用此锁定功能。
在该文档的下方(此处未复制)有关于 LSR 和 LAR 寄存器的信息,包括指定是否“实现软件锁定机制”的位。 也许那个位表明锁定功能是否被贬低?
我找不到有关如何确定我的 MCU 的 CoreSight 版本的信息。
这篇文章讨论了哪些 MCU 具有锁定功能:
https://community.st.com/s/question/0D50X0000AIeZvnSQF/help-what-is-going-on-

来自“ARM® CoreSight™ 架构规范 v3.0”:

B2.3.10 LSR 和 LAR、软件锁定状态寄存器和软件锁定访问寄存器

*目的

软件锁定机制可防止意外访问 CoreSight 组件的寄存器。 正在调试的软件可能会意外写入 CoreSight 组件使用的 memory。 意外访问可能会禁用这些组件,使软件无法调试。 CoreSight 程序员的 model 包括一个锁定状态寄存器 LSR 和一个锁定访问寄存器 LAR,用于控制对 CoreSight 组件的软件访问,以确保意外访问 CoreSight 组件的可能性很小。

注意 从 CoreSight 版本 3.0 开始,由 LAR 和 LSR 控制的软件锁定机制的实现已被弃用。

为了确保被调试的软件永远无法访问解锁的 CoreSight 组件,访问调试寄存器的软件监视器必须在访问任何寄存器之前解锁组件,并在退出监视器之前再次锁定组件。

ARM 建议来自调试器的外部访问不受软件锁定的约束,因此 LSR 的外部读取返回零。 有关 CoreSight 组件如何区分外部和内部访问的信息,请参阅第 D2-116 页的调试 APB 接口 memory map。

一个系统可以包括多个能够访问同一个 CoreSight 组件的总线主控器,例如在包括多个处理器的系统中。 在这种情况下,运行在一个处理器(处理器 A)上的软件可能会在另一个处理器(处理器 B)上运行的调试监视器对组件进行编程时意外访问该组件。因为正在访问的组件无法区分两个处理器,处理器 A 可能会禁用组件并导致处理器 B 出现问题。发生这种情况的可能性很低,但如果有特殊情况使这种情况更有可能发生,则必须考虑。*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM