diff --git a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c index 517efd3..2ec8bc9 100644 --- a/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c +++ b/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/ch32v20x_it.c @@ -16,6 +16,7 @@ #include "ch32v20x_it.h" #include "eth_driver.h" #include "CONFIG.h" +#include "debug.h" /********************************************************************* * LOCAL FUNCTIONS @@ -47,6 +48,16 @@ void NMI_Handler(void) */ void HardFault_Handler(void) { + /* 诊断 (2026-08-13): 抓 RISC-V 异常现场, 定位 HardFault 源头 + mcause: 5=Load访问错误 7=Store访问错误 2=非法指令 4/6=未对齐 + mepc : 异常指令 PC (用 .map 文件反查函数) + mtval : 错误访问地址 (Load/Store fault 时=野指针地址) */ + uint32_t _mcause = 0, _mepc = 0, _mtval = 0; + __asm__ volatile("csrr %0, 0x342" : "=r"(_mcause)); + __asm__ volatile("csrr %0, 0x341" : "=r"(_mepc)); + __asm__ volatile("csrr %0, 0x343" : "=r"(_mtval)); + PRINT("HARDFAULT: mcause=0x%08lx mepc=0x%08lx mtval=0x%08lx\n", + (unsigned long)_mcause, (unsigned long)_mepc, (unsigned long)_mtval); NVIC_SystemReset(); while(1) {