初始版本
This commit is contained in:
96
components/libraries/hardfault/hardfault.h
Normal file
96
components/libraries/hardfault/hardfault.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#ifndef HARDFAULT_H__
|
||||
#define HARDFAULT_H__
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @defgroup hardfault_default HardFault exception
|
||||
* @{
|
||||
* @brief Default HardFault exception implementation.
|
||||
* @ingroup app_common
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Contents of the stack.
|
||||
*
|
||||
* This structure is used to re-create the stack layout after a HardFault exception was raised.
|
||||
*/
|
||||
typedef struct HardFault_stack
|
||||
{
|
||||
uint32_t r0; ///< R0 register.
|
||||
uint32_t r1; ///< R1 register.
|
||||
uint32_t r2; ///< R2 register.
|
||||
uint32_t r3; ///< R3 register.
|
||||
uint32_t r12; ///< R12 register.
|
||||
uint32_t lr; ///< Link register.
|
||||
uint32_t pc; ///< Program counter.
|
||||
uint32_t psr; ///< Program status register.
|
||||
} HardFault_stack_t;
|
||||
|
||||
/**
|
||||
* @brief Function for processing HardFault exceptions.
|
||||
*
|
||||
* An application that needs to process HardFault exceptions should provide an implementation of this function.
|
||||
* It will be called from the HardFault handler.
|
||||
* If no implementation is provided, the library uses a default one, which just restarts the MCU.
|
||||
*
|
||||
* @note If the DEBUG_NRF macro is defined, the software breakpoint is set just before the call
|
||||
* to this function.
|
||||
*
|
||||
* @param p_stack Pointer to the stack bottom.
|
||||
* This pointer might be NULL if the HardFault was called when the main stack was
|
||||
* the active stack and a stack overrun is detected.
|
||||
* In such a situation, the stack pointer is reinitialized to the default position,
|
||||
* and the stack content is lost.
|
||||
*/
|
||||
void HardFault_process(HardFault_stack_t * p_stack);
|
||||
|
||||
/** @} */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HARDFAULT_H__ */
|
||||
165
components/libraries/hardfault/hardfault_genhf.h
Normal file
165
components/libraries/hardfault/hardfault_genhf.h
Normal file
@@ -0,0 +1,165 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#ifndef HARDFAULT_GENHF_H__
|
||||
#define HARDFAULT_GENHF_H__
|
||||
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @defgroup hardfault_genhf Generating HardFaults for testing
|
||||
* @{
|
||||
* @brief Macros and functions used to generate a HardFault in a selected place.
|
||||
* @ingroup hardfault_default
|
||||
*
|
||||
* This functionality is meant to be used while testing the @ref hardfault_default library functionality.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Function for generating an invalid function pointer HardFault.
|
||||
*
|
||||
* Function tries to jump into illegal address.
|
||||
*/
|
||||
static inline void hardfault_genhf_invalid_fp(void);
|
||||
|
||||
/**
|
||||
* @brief Function for generating an undefined instruction HardFault.
|
||||
*
|
||||
* This function places the value in the code area that is not the legal instruction.
|
||||
*/
|
||||
static inline void hardfault_genhf_undefined_instr(void);
|
||||
|
||||
/**
|
||||
* @brief Function for generating an unaligned LDM access HardFault.
|
||||
*
|
||||
* This function generates fault exception loading values from an unaligned address.
|
||||
*/
|
||||
static inline void hardfault_genhf_ldm_align(void);
|
||||
|
||||
#if defined( __CC_ARM )
|
||||
|
||||
static inline __ASM void hardfault_genhf_invalid_fp(void)
|
||||
{
|
||||
MOVS r0, #0
|
||||
BLX r0
|
||||
}
|
||||
|
||||
static inline __ASM void hardfault_genhf_undefined_instr(void)
|
||||
{
|
||||
DCI 0xf123
|
||||
DCI 0x4567
|
||||
}
|
||||
|
||||
static inline __ASM void hardfault_genhf_ldm_align(void)
|
||||
{
|
||||
MOVS r0, #1
|
||||
LDM r0!, {r1-r2}
|
||||
}
|
||||
|
||||
#elif defined( __ICCARM__ )
|
||||
|
||||
#pragma inline=forced
|
||||
static inline void hardfault_genhf_invalid_fp(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" movs r0, #0 \n"
|
||||
" blx r0 \n"
|
||||
);
|
||||
}
|
||||
|
||||
#pragma inline=forced
|
||||
static inline void hardfault_genhf_undefined_instr(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
"DATA \n"
|
||||
" DC16 0xf123 \n"
|
||||
" DC16 0x4567 \n"
|
||||
);
|
||||
}
|
||||
|
||||
#pragma inline=forced
|
||||
static inline void hardfault_genhf_ldm_align(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" movs r0, #1 \n"
|
||||
" ldm r0!, {r1-r2} \n"
|
||||
);
|
||||
}
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
static inline void hardfault_genhf_invalid_fp(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" .syntax unified \n"
|
||||
" movs r0, #0 \n"
|
||||
" blx r0 \n"
|
||||
);
|
||||
}
|
||||
|
||||
static inline void hardfault_genhf_undefined_instr(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" .hword 0xf123 \n"
|
||||
" .hword 0x4567 \n"
|
||||
);
|
||||
}
|
||||
|
||||
static inline void hardfault_genhf_ldm_align(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" .syntax unified \n"
|
||||
" movs r0, #1 \n"
|
||||
" ldm r0!, {r1-r2} \n"
|
||||
);
|
||||
}
|
||||
|
||||
#else
|
||||
#error "Unsupported compiler"
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* HARDFAULT_GENHF_H__ */
|
||||
156
components/libraries/hardfault/hardfault_implementation.c
Normal file
156
components/libraries/hardfault/hardfault_implementation.c
Normal file
@@ -0,0 +1,156 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include "hardfault.h"
|
||||
#include "nrf.h"
|
||||
#include "compiler_abstraction.h"
|
||||
#include "app_util_platform.h"
|
||||
#ifdef SOFTDEVICE_PRESENT
|
||||
#include "nrf_soc.h"
|
||||
#endif
|
||||
#define NRF_LOG_MODULE_NAME hardfault
|
||||
#include "nrf_log.h"
|
||||
#include "nrf_log_ctrl.h"
|
||||
NRF_LOG_MODULE_REGISTER();
|
||||
|
||||
|
||||
/*lint -save -e14 */
|
||||
__WEAK void HardFault_process(HardFault_stack_t * p_stack)
|
||||
{
|
||||
// Restart the system by default
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
/*lint -restore */
|
||||
|
||||
void HardFault_c_handler(uint32_t * p_stack_address)
|
||||
{
|
||||
NRF_LOG_FINAL_FLUSH();
|
||||
|
||||
#if (__CORTEX_M == 0x04)
|
||||
|
||||
#ifndef CFSR_MMARVALID
|
||||
#define CFSR_MMARVALID (1 << (0 + 7))
|
||||
#endif
|
||||
|
||||
#ifndef CFSR_BFARVALID
|
||||
#define CFSR_BFARVALID (1 << (8 + 7))
|
||||
#endif
|
||||
|
||||
HardFault_stack_t * p_stack = (HardFault_stack_t *)p_stack_address;
|
||||
static const char *cfsr_msgs[] = {
|
||||
[0] = "The processor has attempted to execute an undefined instruction",
|
||||
[1] = "The processor attempted a load or store at a location that does not permit the operation",
|
||||
[2] = NULL,
|
||||
[3] = "Unstack for an exception return has caused one or more access violations",
|
||||
[4] = "Stacking for an exception entry has caused one or more access violations",
|
||||
[5] = "A MemManage fault occurred during floating-point lazy state preservation",
|
||||
[6] = NULL,
|
||||
[7] = NULL,
|
||||
[8] = "Instruction bus error",
|
||||
[9] = "Data bus error (PC value stacked for the exception return points to the instruction that caused the fault)",
|
||||
[10] = "Data bus error (return address in the stack frame is not related to the instruction that caused the error)",
|
||||
[11] = "Unstack for an exception return has caused one or more BusFaults",
|
||||
[12] = "Stacking for an exception entry has caused one or more BusFaults",
|
||||
[13] = "A bus fault occurred during floating-point lazy state preservation",
|
||||
[14] = NULL,
|
||||
[15] = NULL,
|
||||
[16] = "The processor has attempted to execute an undefined instruction",
|
||||
[17] = "The processor has attempted to execute an instruction that makes illegal use of the EPSR",
|
||||
[18] = "The processor has attempted an illegal load of EXC_RETURN to the PC, as a result of an invalid context, or an invalid EXC_RETURN value",
|
||||
[19] = "The processor has attempted to access a coprocessor",
|
||||
[20] = NULL,
|
||||
[21] = NULL,
|
||||
[22] = NULL,
|
||||
[23] = NULL,
|
||||
[24] = "The processor has made an unaligned memory access",
|
||||
[25] = "The processor has executed an SDIV or UDIV instruction with a divisor of 0",
|
||||
};
|
||||
|
||||
uint32_t cfsr = SCB->CFSR;
|
||||
|
||||
if (p_stack != NULL)
|
||||
{
|
||||
// Print information about error.
|
||||
NRF_LOG_ERROR("HARD FAULT at 0x%08X", p_stack->pc);
|
||||
NRF_LOG_ERROR(" R0: 0x%08X R1: 0x%08X R2: 0x%08X R3: 0x%08X",
|
||||
p_stack->r0, p_stack->r1, p_stack->r2, p_stack->r3);
|
||||
NRF_LOG_ERROR(" R12: 0x%08X LR: 0x%08X PSR: 0x%08X",
|
||||
p_stack->r12, p_stack->lr, p_stack->psr);
|
||||
}
|
||||
else
|
||||
{
|
||||
NRF_LOG_ERROR("Stack violation: stack pointer outside stack area.");
|
||||
}
|
||||
|
||||
if (SCB->HFSR & SCB_HFSR_VECTTBL_Msk)
|
||||
{
|
||||
NRF_LOG_ERROR("Cause: BusFault on a vector table read during exception processing.");
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < sizeof(cfsr_msgs) / sizeof(cfsr_msgs[0]); i++)
|
||||
{
|
||||
if (((cfsr & (1 << i)) != 0) && (cfsr_msgs[i] != NULL))
|
||||
{
|
||||
NRF_LOG_ERROR("Cause: %s.", (uint32_t)cfsr_msgs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (cfsr & CFSR_MMARVALID)
|
||||
{
|
||||
NRF_LOG_ERROR("MemManage Fault Address: 0x%08X", SCB->MMFAR);
|
||||
}
|
||||
|
||||
if (cfsr & CFSR_BFARVALID)
|
||||
{
|
||||
NRF_LOG_ERROR("Bus Fault Address: 0x%08X", SCB->BFAR);
|
||||
}
|
||||
|
||||
#if defined(DEBUG)
|
||||
|
||||
NRF_BREAKPOINT_COND;
|
||||
|
||||
#endif // defined (DEBUG)
|
||||
|
||||
#endif // __CORTEX_M == 0x04
|
||||
|
||||
HardFault_process((HardFault_stack_t *)p_stack_address);
|
||||
}
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
extern void HardFault_c_handler(uint32_t *);
|
||||
|
||||
void HardFault_Handler(void) __attribute__(( naked ));
|
||||
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" .syntax unified \n"
|
||||
|
||||
" ldr r0, =0xFFFFFFFD \n"
|
||||
" cmp r0, lr \n"
|
||||
" bne HardFault_Handler_ChooseMSP \n"
|
||||
/* Reading PSP into R0 */
|
||||
" mrs r0, PSP \n"
|
||||
" b HardFault_Handler_Continue \n"
|
||||
"HardFault_Handler_ChooseMSP: \n"
|
||||
/* Reading MSP into R0 */
|
||||
" mrs r0, MSP \n"
|
||||
/* -----------------------------------------------------------------
|
||||
* If we have selected MSP check if we may use stack safetly.
|
||||
* If not - reset the stack to the initial value. */
|
||||
" ldr r1, =__StackTop \n"
|
||||
" ldr r2, =__StackLimit \n"
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
" cmp r0, r1 \n"
|
||||
" bhi HardFault_MoveSP \n"
|
||||
" cmp r0, r2 \n"
|
||||
" bhi HardFault_Handler_Continue \n"
|
||||
/* ----------------------------------------------------------------- */
|
||||
"HardFault_MoveSP: \n"
|
||||
" mov SP, r1 \n"
|
||||
" movs r0, #0 \n"
|
||||
|
||||
"HardFault_Handler_Continue: \n"
|
||||
" ldr r3, =%0 \n"
|
||||
" bx r3 \n"
|
||||
|
||||
" .ltorg \n"
|
||||
: : "X"(HardFault_c_handler)
|
||||
);
|
||||
}
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
#pragma section = "CSTACK"
|
||||
extern void HardFault_c_handler( uint32_t * );
|
||||
|
||||
__stackless void HardFault_Handler(void);
|
||||
|
||||
__stackless void HardFault_Handler(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" ldr r0, 100f \n"
|
||||
" cmp r0, lr \n"
|
||||
" bne 1f \n"
|
||||
/* Reading PSP into R0 */
|
||||
" mrs r0, PSP \n"
|
||||
" b 3f \n"
|
||||
"1: \n"
|
||||
/* Reading MSP into R0 */
|
||||
" mrs r0, MSP \n"
|
||||
/* -----------------------------------------------------------------
|
||||
* If we have selected MSP check if we may use stack safetly.
|
||||
* If not - reset the stack to the initial value. */
|
||||
" ldr r1, 101f \n"
|
||||
" ldr r2, 102f \n"
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
" cmp r0, r1 \n"
|
||||
" bhi 2f \n"
|
||||
" cmp r0, r2 \n"
|
||||
" bhi 3f \n"
|
||||
/* ----------------------------------------------------------------- */
|
||||
"2: \n"
|
||||
" mov SP, r1 \n"
|
||||
" movs r0, #0 \n"
|
||||
|
||||
"3: \n"
|
||||
" ldr r3, 103f \n"
|
||||
" bx r3 \n"
|
||||
|
||||
"DATA \n"
|
||||
"100: \n"
|
||||
" DC32 0xFFFFFFFD \n"
|
||||
"101: \n"
|
||||
" DC32 %c0 \n"
|
||||
"102: \n"
|
||||
" DC32 %c1 \n"
|
||||
"103: \n"
|
||||
" DC32 %c2 \n"
|
||||
: /* Outputs */
|
||||
: /* Inputs */
|
||||
"i"(__section_end("CSTACK")),
|
||||
"i"(__section_begin("CSTACK")),
|
||||
"i"(&HardFault_c_handler)
|
||||
);
|
||||
}
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
|
||||
//lint -save -e27
|
||||
|
||||
__ASM void HardFault_Handler(void)
|
||||
{
|
||||
PRESERVE8
|
||||
EXTERN HardFault_c_handler
|
||||
EXTERN |STACK$$Base|
|
||||
EXTERN |STACK$$Limit|
|
||||
|
||||
ldr r0, =0xFFFFFFFD
|
||||
cmp r0, lr
|
||||
bne HardFault_Handler_ChooseMSP
|
||||
/* Reading PSP into R0 */
|
||||
mrs r0, PSP
|
||||
b HardFault_Handler_Continue
|
||||
HardFault_Handler_ChooseMSP
|
||||
/* Reading MSP into R0 */
|
||||
mrs r0, MSP
|
||||
/* -----------------------------------------------------------------
|
||||
* If we have selected MSP, check if we may use stack safely.
|
||||
* If not - reset the stack to the initial value. */
|
||||
ldr r1, =|STACK$$Limit|
|
||||
ldr r2, =|STACK$$Base|
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
cmp r0, r1
|
||||
bhi HardFault_MoveSP
|
||||
cmp r0, r2
|
||||
bhi HardFault_Handler_Continue
|
||||
/* ----------------------------------------------------------------- */
|
||||
HardFault_MoveSP
|
||||
mov SP, r1
|
||||
movs r0, #0
|
||||
|
||||
HardFault_Handler_Continue
|
||||
ldr r3, =HardFault_c_handler
|
||||
bx r3
|
||||
|
||||
ALIGN
|
||||
}
|
||||
|
||||
//lint -restore
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
extern void HardFault_c_handler(uint32_t *);
|
||||
|
||||
void HardFault_Handler(void) __attribute__(( naked ));
|
||||
|
||||
void HardFault_Handler(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" tst lr, #4 \n"
|
||||
|
||||
/* PSP is quite simple and does not require additional handler */
|
||||
" itt ne \n"
|
||||
" mrsne r0, psp \n"
|
||||
/* Jump to the handler, do not store LR - returning from handler just exits exception */
|
||||
" bne HardFault_Handler_Continue \n"
|
||||
|
||||
/* Processing MSP requires stack checking */
|
||||
" mrs r0, msp \n"
|
||||
|
||||
" ldr r1, =__StackTop \n"
|
||||
" ldr r2, =__StackLimit \n"
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
" cmp r0, r1 \n"
|
||||
" bhi HardFault_MoveSP \n"
|
||||
" cmp r0, r2 \n"
|
||||
" bhi HardFault_Handler_Continue \n"
|
||||
|
||||
"HardFault_MoveSP: \n"
|
||||
" mov sp, r1 \n"
|
||||
" mov r0, #0 \n"
|
||||
|
||||
"HardFault_Handler_Continue: \n"
|
||||
" ldr r3, =%0 \n"
|
||||
" bx r3 \n"
|
||||
" .ltorg \n"
|
||||
: : "X"(HardFault_c_handler)
|
||||
);
|
||||
}
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
#pragma section = "CSTACK"
|
||||
extern void HardFault_c_handler( uint32_t * );
|
||||
|
||||
__stackless void HardFault_Handler(void);
|
||||
|
||||
__stackless void HardFault_Handler(void)
|
||||
{
|
||||
__ASM volatile(
|
||||
" ldr.n r3, 103f \n"
|
||||
" tst lr, #4 \n"
|
||||
|
||||
/* PSP is quite simple and does not require additional handler */
|
||||
" itt ne \n"
|
||||
" mrsne r0, psp \n"
|
||||
/* Jump to the handler, do not store LR - returning from handler just exits exception */
|
||||
" bxne r3 \n"
|
||||
|
||||
/* Processing MSP requires stack checking */
|
||||
" mrs r0, msp \n"
|
||||
|
||||
" ldr.n r1, 101f \n"
|
||||
" ldr.n r2, 102f \n"
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
" cmp r0, r1 \n"
|
||||
" bhi.n 1f \n"
|
||||
" cmp r0, r2 \n"
|
||||
" bhi.n 2f \n"
|
||||
|
||||
"1: \n"
|
||||
" mov sp, r1 \n"
|
||||
" mov r0, #0 \n"
|
||||
|
||||
"2: \n"
|
||||
" bx r3 \n"
|
||||
/* Data alignment if required */
|
||||
" nop \n"
|
||||
|
||||
"DATA \n"
|
||||
"101: \n"
|
||||
" DC32 %c0 \n"
|
||||
"102: \n"
|
||||
" DC32 %c1 \n"
|
||||
"103: \n"
|
||||
" DC32 %c2 \n"
|
||||
: /* Outputs */
|
||||
: /* Inputs */
|
||||
"i"(__section_end("CSTACK")),
|
||||
"i"(__section_begin("CSTACK")),
|
||||
"i"(&HardFault_c_handler)
|
||||
);
|
||||
}
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Copyright (c) 2015 - 2020, Nordic Semiconductor ASA
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form, except as embedded into a Nordic
|
||||
* Semiconductor ASA integrated circuit in a product or a software update for
|
||||
* such product, must reproduce the above copyright notice, this list of
|
||||
* conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* 3. Neither the name of Nordic Semiconductor ASA nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* 4. This software, with or without modification, must only be used with a
|
||||
* Nordic Semiconductor ASA integrated circuit.
|
||||
*
|
||||
* 5. Any software provided in binary form under this license must not be reverse
|
||||
* engineered, decompiled, modified and/or disassembled.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
#include "sdk_common.h"
|
||||
#if NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
#include <stdint.h>
|
||||
#include "compiler_abstraction.h"
|
||||
|
||||
|
||||
//lint -save -e27
|
||||
|
||||
__ASM void HardFault_Handler(void)
|
||||
{
|
||||
PRESERVE8
|
||||
EXTERN HardFault_c_handler
|
||||
EXTERN |STACK$$Base|
|
||||
EXTERN |STACK$$Limit|
|
||||
|
||||
ldr r3, =HardFault_c_handler
|
||||
tst lr, #4
|
||||
|
||||
/* PSP is quite simple and does not require additional handler */
|
||||
itt ne
|
||||
mrsne r0, psp
|
||||
/* Jump to the handler, do not store LR - returning from handler just exits exception */
|
||||
bxne r3
|
||||
|
||||
/* Processing MSP requires stack checking */
|
||||
mrs r0, msp
|
||||
|
||||
ldr r1, =|STACK$$Limit|
|
||||
ldr r2, =|STACK$$Base|
|
||||
|
||||
/* MSP is in the range of the stack area */
|
||||
cmp r0, r1
|
||||
bhi HardFault_MoveSP
|
||||
cmp r0, r2
|
||||
bhi HardFault_Handler_Continue
|
||||
|
||||
HardFault_MoveSP
|
||||
mov sp, r1
|
||||
mov r0, #0
|
||||
|
||||
HardFault_Handler_Continue
|
||||
bx r3
|
||||
|
||||
ALIGN
|
||||
}
|
||||
|
||||
//lint -restore
|
||||
#endif //NRF_MODULE_ENABLED(HARDFAULT_HANDLER)
|
||||
Reference in New Issue
Block a user