再上一篇:15.7 内核的其它调试特性
上一篇:第16章
主页
下一篇:16.3 跟踪组件:仪器化跟踪宏单元(ITM)
再下一篇:16.4 跟踪组件:嵌入式跟踪宏单元
文章列表

16.2 跟踪组件:数据观察点与跟踪(DWT)

《Cortex-M3 权威指南》,嵌入式处理器开发教程。

本节的主角是 DWT,它提供的调试功能包括:

1. 它包含了 4个比较器,可以配置成在发生比较匹配时,执行如下动作:

a) 硬件观察点(产生一个观察点调试事件,并且用它来调用调试模式,包括停机模式和 调试监视器模式

b) ETM触发,可以触发 ETM发出一个数据包,并汇入指令跟踪数据流中

c) 程序计数器(PC)采样器事件触发

d) 数据地址采样器触发

e) 第一个比较器还能用于比较时钟周期计数器(CYCCNT),用于取代对数据地址的比较

2. 作为计数器,DWT可以对下列项目进行计数:

a) 时钟周期(CYCCNT)

b) 被折叠(Folded)的指令

c) 对加载/存储单元(LSU)的操作

d) 睡眠的时钟周期

e) 每指令周期数(CPI)

f) 中断的额外开销(overhead)

3. 以固定的周期采样 PC的值

4. 中断事件跟踪

当用于硬件观察点或 ETM 触发时,比较器既可以比较数据地址,也可以比较程序计数器 PC。 当用于其它功能时,比较器则只能比较数据地址。
每一个比较器都有 3个寄存器
 COMP寄存器
 MASK寄存器
 FUNCTION控制寄存器
其中,COMP 寄存器是一个 32 位寄存器,用于存储要比较的值。MASK 寄存器可以用于掩蔽数 据地址的一些位,被掩蔽的位不参与比较。如表 16.1所示:
表 16.1 MASK 寄存器定义

MASK

被忽略的位段

0

忽略所有的位

1

忽略[0]

2

忽略[1:0]

3

忽略[2:0]

15

忽略[14:0]

比较器的 FUNCTION 寄存器用于决定该比较器的功能。为了避免潜在的不可预料的行为,必须
先编程 MASK和 COMP,最后再编程 RUNCTION。如果要更改某个比较器的功能,必须先把 FUNCTION
清零——除能该比较器,再重新配置一回,依然是最后配置 FUNCTION。

DWT 中有剩余的计数器,它们典型地用于程序代码的“性能速写”(profiling)。通过编程它 们,就可以让它们在计数器溢出时发出事件(以跟踪数据包的形式)。最典型地,就是使用 CYCCNT 寄存器来测量执行某个任务所花的周期数,这也可以用作时间基准相关的目的(操作系统中统计 CPU 使用率可以用到它)。