NXP MCU 技术论坛
直播中

王军

7年用户 1766经验值
私信 关注
[问答]

请提供示例代码以触发BFARVALID为真且PRECISERR位也为真的总线故障?

请提供示例代码以触发BFARVALID为真且PRECISERR位也为真的总线故障

回帖(1)

chumowei

2023-11-29 10:43:52
注:以下示例代码仅供参考,具体实现可能因处理器型号等因素而有所不同。

触发BFARVALID为真且PRECISERR位也为真的总线故障的示例代码:

```c
void HardFault_Handler(void) {
  volatile uint32_t* bfar = (volatile uint32_t*) (0xE000ED38U);  // 获取BFAR寄存器地址
  uint32_t bfarValue = *bfar;  // 读取BFAR寄存器的值

  // 判断BFARVALID位和PRECISERR位是否都为1
  if ((SCB->CFSR & SCB_CFSR_BUSFAULTSR_Msk) == SCB_CFSR_BUSFAULTSR_BFARVALID_Msk | SCB_CFSR_BUSFAULTSR_PRECISERR_Msk) {
    // 触发了BFARVALID为真且PRECISERR位也为真的总线故障
    // 处理代码
    // ...
  } else {
    // 其他总线故障
    // 处理代码
    // ...
  }

  // 清除总线故障标志位
  SCB->CFSR |= (1 << SCB_CFSR_BUSFAULTSR_Pos);

  // 执行返回从异常到主流程的处理
  // ...
}
```

触发BFARVALID为真且PRECISERR位也为真的总线故障的示例:

```c
// 假设要在存储器地址0x80000000处写入一个uint32_t类型的数据
volatile uint32_t* ptr = (volatile uint32_t*) 0x80000000;
*ptr = 0xDEADBEEF;  // 触发总线故障
```
举报

更多回帖

发帖
×
20
完善资料,
赚取积分