From 24fdcb4b5adb7f531004d2ef965db822730edf47 Mon Sep 17 00:00:00 2001 From: Lizongdi <1210855344@qq.com> Date: Sun, 20 Sep 2026 15:46:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=B8=BB=E7=BA=BF=E5=BE=85=E5=90=88?= =?UTF-8?q?=E3=80=91=E5=8A=A0naked=E9=98=B2=E6=AD=A2=E8=A2=AB=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Src/stm32h7xx_it.c | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 7d72ae7..c37d2b4 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -111,10 +111,16 @@ void NMI_Handler(void) /** * @brief This function handles Hard fault interrupt. */ -void HardFault_Handler(void) +__attribute__((naked)) void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ - + __asm volatile ( + "TST lr, #4 \n" + "ITE EQ \n" + "MRSEQ r0, MSP \n" + "MRSNE r0, PSP \n" + "B hard_fault_handler_c \n" + ); /* USER CODE END HardFault_IRQn 0 */ while (1) { @@ -126,10 +132,16 @@ void HardFault_Handler(void) /** * @brief This function handles Memory management fault. */ -void MemManage_Handler(void) +__attribute__((naked)) void MemManage_Handler(void) { /* USER CODE BEGIN MemoryManagement_IRQn 0 */ - + __asm volatile ( + "TST lr, #4 \n" + "ITE EQ \n" + "MRSEQ r0, MSP \n" + "MRSNE r0, PSP \n" + "B hard_fault_handler_c \n" + ); /* USER CODE END MemoryManagement_IRQn 0 */ while (1) { @@ -141,10 +153,16 @@ void MemManage_Handler(void) /** * @brief This function handles Pre-fetch fault, memory access fault. */ -void BusFault_Handler(void) +__attribute__((naked)) void BusFault_Handler(void) { /* USER CODE BEGIN BusFault_IRQn 0 */ - + __asm volatile ( + "TST lr, #4 \n" + "ITE EQ \n" + "MRSEQ r0, MSP \n" + "MRSNE r0, PSP \n" + "B hard_fault_handler_c \n" + ); /* USER CODE END BusFault_IRQn 0 */ while (1) { @@ -156,10 +174,16 @@ void BusFault_Handler(void) /** * @brief This function handles Undefined instruction or illegal state. */ -void UsageFault_Handler(void) +__attribute__((naked)) void UsageFault_Handler(void) { /* USER CODE BEGIN UsageFault_IRQn 0 */ - + __asm volatile ( + "TST lr, #4 \n" + "ITE EQ \n" + "MRSEQ r0, MSP \n" + "MRSNE r0, PSP \n" + "B hard_fault_handler_c \n" + ); /* USER CODE END UsageFault_IRQn 0 */ while (1) {