|
|
|
@ -56,7 +56,7 @@ void NMI_Handler(void) { while (1); }
@@ -56,7 +56,7 @@ void NMI_Handler(void) { while (1); }
|
|
|
|
|
/*
|
|
|
|
|
save watchdog data for a hard fault |
|
|
|
|
*/ |
|
|
|
|
static void save_fault_watchdog(uint16_t line, FaultType fault_type, uint32_t fault_addr) |
|
|
|
|
static void save_fault_watchdog(uint16_t line, FaultType fault_type, uint32_t fault_addr, uint32_t lr) |
|
|
|
|
{ |
|
|
|
|
#ifndef HAL_BOOTLOADER_BUILD |
|
|
|
|
bool using_watchdog = AP_BoardConfig::watchdog_enabled(); |
|
|
|
@ -67,6 +67,7 @@ static void save_fault_watchdog(uint16_t line, FaultType fault_type, uint32_t fa
@@ -67,6 +67,7 @@ static void save_fault_watchdog(uint16_t line, FaultType fault_type, uint32_t fa
|
|
|
|
|
pd.fault_addr = fault_addr; |
|
|
|
|
pd.fault_thd_prio = chThdGetPriorityX(); |
|
|
|
|
pd.fault_icsr = SCB->ICSR; |
|
|
|
|
pd.fault_lr = lr; |
|
|
|
|
stm32_watchdog_save((uint32_t *)&hal.util->persistent_data, (sizeof(hal.util->persistent_data)+3)/4); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -98,7 +99,7 @@ void HardFault_Handler(void) {
@@ -98,7 +99,7 @@ void HardFault_Handler(void) {
|
|
|
|
|
(void)isFaultOnStacking; |
|
|
|
|
(void)isFaultAddressValid; |
|
|
|
|
|
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress); |
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress, (uint32_t)ctx.lr_thd); |
|
|
|
|
|
|
|
|
|
#ifdef HAL_GPIO_PIN_FAULT |
|
|
|
|
while (true) { |
|
|
|
@ -151,7 +152,7 @@ void UsageFault_Handler(void) {
@@ -151,7 +152,7 @@ void UsageFault_Handler(void) {
|
|
|
|
|
(void)isUnalignedAccessFault; |
|
|
|
|
(void)isDivideByZeroFault; |
|
|
|
|
|
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress); |
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress, (uint32_t)ctx.lr_thd); |
|
|
|
|
|
|
|
|
|
//Cause debugger to stop. Ignored if no debugger is attached
|
|
|
|
|
while(1) {} |
|
|
|
@ -183,7 +184,7 @@ void MemManage_Handler(void) {
@@ -183,7 +184,7 @@ void MemManage_Handler(void) {
|
|
|
|
|
(void)isExceptionStackingFault; |
|
|
|
|
(void)isFaultAddressValid; |
|
|
|
|
|
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress); |
|
|
|
|
save_fault_watchdog(__LINE__, faultType, faultAddress, (uint32_t)ctx.lr_thd); |
|
|
|
|
|
|
|
|
|
while(1) {} |
|
|
|
|
} |
|
|
|
|