ARM Cortex M0+, data watchpoint的所有功能讲解及代码示例
时间: 2024-03-21 08:39:09 浏览: 37
Cortex-M0+ 处理器支持数据观察点(Data Watchpoint),可以在数据访问时触发断点。数据观察点的功能包括:
1. 监视指定地址的读写操作,可以选择只监视读操作或者写操作,也可以同时监视读写操作。
2. 监视指定地址的指定大小的数据访问,可以选择监视 1 字节、2 字节、4 字节或者 8 字节的数据访问。
3. 监视指定地址的指定值的数据访问,可以选择监视等于、小于、大于、小于等于或者大于等于指定值的数据访问。
以下是一个示例代码,演示了如何使用数据观察点监视指定地址的读写操作。在这个例子中,我们使用了 Keil MDK 开发环境和 Keil ULINK2 调试器。
```
#include "stm32f0xx.h"
void set_data_watchpoint(uint32_t address, uint32_t size, uint32_t access_type) {
// 配置 DWT 控制寄存器
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
DWT->CTRL |= DWT_CTRL_DWTENA_Msk;
// 配置 DWT 数据地址寄存器
DWT->COMP0 = address;
// 配置 DWT 数据比较寄存器
uint32_t comparator = 0;
comparator |= (access_type << 16);
comparator |= ((size - 1) << 10);
comparator |= (1 << 1);
comparator |= (1 << 0);
DWT->COMP0_MASK = comparator;
}
int main(void) {
// 配置 GPIO
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = GPIO_Pin_0;
gpio_init.GPIO_Mode = GPIO_Mode_OUT;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_init);
// 配置数据观察点
set_data_watchpoint((uint32_t)&GPIOA->ODR, 4, 3);
while (1) {
// 读取 GPIOA 输出寄存器
uint32_t value = GPIOA->ODR;
// 修改 GPIOA 输出寄存器
GPIOA->ODR = ~value;
// 延时
for (volatile int i = 0; i < 1000000; i++) {}
// 设置 LED
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (value & GPIO_Pin_0) ? Bit_SET : Bit_RESET);
}
}
```
在上述代码中,我们首先定义了一个函数 `set_data_watchpoint`,用于配置数据观察点。这个函数接受三个参数:地址、大小和访问类型。地址指定要监视的地址,大小指定要监视的数据大小,访问类型指定要监视的访问类型(读、写或者读写)。在函数内部,我们使用了 DWT 控制寄存器、DWT 数据地址寄存器和 DWT 数据比较寄存器来配置数据观察点。
在 `main` 函数中,我们首先配置了 GPIOA 输出寄存器作为要监视的地址。然后,在一个无限循环中,我们不断读取和修改 GPIOA 输出寄存器,并且设置 LED 的状态。由于我们已经配置了数据观察点,所以每次读取或者修改 GPIOA 输出寄存器时都会触发数据观察点断点,从而暂停程序的执行。
请注意,以上示例代码仅供参考,具体实现可能根据具体的硬件平台和调试器有所不同。此外,数据观察点的配置和使用需要特定的调试器和软件支持,不同的调试器和软件可能有不同的实现方式和限制。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)