feat(vd960DBN): fault_diag — .noinit RAM 现场 + 执行轨迹 marker 定位神秘复位
现象: LUP 帧后复位, RST=0x00000000 (无标志) 且 HardFault 打印缺失
(上次 0x10000000=SFT 确认 HardFault 路径, 这次连打印都没有)
方案: .noinit 段复位不清零, 跨复位留痕
- Link.ld: 新增 .noinit 段 (startup 只清 .bss 不碰)
- fault_diag.h: FaultDiag{magic,mcause,mepc,mtval,marker,boot_cnt} + FAULT_MARKER 轨迹宏
- HardFault_Handler: 纯 RAM 写 mcause/mepc/mtval (官方 __get_MCAUSE/MEPC/MTVAL,
不依赖 UART/printf, 栈坏也能留痕) + 尽力打印
- main 开头 fault_diag_init(): 打印上次现场 + 递增 boot_cnt
- 轨迹 marker: 主循环 LOOP_TOP/UART_SRV/SIM_SPI/POLL_BLE + LUP 链
LUP_FRAME/INGEST/EVT_FEED 入口出口, 复位后看 marker 停在哪一步
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
#include "CONFIG.h"
|
||||
#include "loop_uart_proto.h"
|
||||
#include "cmcng.h"
|
||||
#include "fault_diag.h"
|
||||
#include <string.h>
|
||||
|
||||
/*===========================================================================
|
||||
@@ -681,7 +682,9 @@ void lup_process_frame(const uint8_t *pkg, uint16_t len)
|
||||
int csr;
|
||||
uint8_t i;
|
||||
|
||||
if (len < 6) return;
|
||||
FAULT_MARKER(MK_LUP_FRAME_IN);
|
||||
|
||||
if (len < 6) { FAULT_MARKER(MK_LUP_FRAME_OUT); return; }
|
||||
|
||||
// Debug: print raw
|
||||
PRINT("LUP Rx:");
|
||||
@@ -712,4 +715,5 @@ void lup_process_frame(const uint8_t *pkg, uint16_t len)
|
||||
|
||||
// Try matching with pending command
|
||||
lup_cmd_on_response(pkg, len);
|
||||
FAULT_MARKER(MK_LUP_FRAME_OUT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user