#define ALIAS(f) __attribute__ ((alias (#f)))
static const uint32_t* APPLICATION_BINARY_ADDRESS_SLOT = (uint32_t*)0x3FC00;
static uint32_t app_start = 0;
void BranchIntHandler(void)
{
__asm volatile
(
"MRS R0, PSR;\t\n"
"MOV R1, #0x3F;\t\n"
"AND R0, R1;\t\n"
"LSL R0, R0, #2;\t\n"
"LDR R2, [%0];\t\n"
"LDR R0, [R0, R2];\t\n"
"BX R0;\t\n"
:
: "r" (&app_start) //%0 will have app_start address
);
}
void NMI_Handler(void) ALIAS(BranchIntHandler);
void HardFault_Handler(void) ALIAS(BranchIntHandler);
void SVC_Handler(void) ALIAS(BranchIntHandler);
void PendSV_Handler(void) ALIAS(BranchIntHandler);
void SysTick_Handler(void) ALIAS(BranchIntHandler);
void POWER_CLOCK_IRQHandler(void) ALIAS(BranchIntHandler);
void RADIO_IRQHandler(void) ALIAS(BranchIntHandler);
void SPI0_TWI0_IRQHandler(void) ALIAS(BranchIntHandler);
void SPI1_TWI1_IRQHandler(void) ALIAS(BranchIntHandler);
void ADC_IRQHandler(void) ALIAS(BranchIntHandler);
void RTC0_IRQHandler(void) ALIAS(BranchIntHandler);
void TIMER0_IRQHandler(void) ALIAS(BranchIntHandler);
void TIMER1_IRQHandler(void) ALIAS(BranchIntHandler);
void TIMER2_IRQHandler(void) ALIAS(BranchIntHandler);
void TEMP_IRQHandler(void) ALIAS(BranchIntHandler);
void RNG_IRQHandler(void) ALIAS(BranchIntHandler);
void ECB_IRQHandler(void) ALIAS(BranchIntHandler);
void CCM_AAR_IRQHandler(void) ALIAS(BranchIntHandler);
void WDT_IRQHandler(void) ALIAS(BranchIntHandler);
void QDEC_IRQHandler(void) ALIAS(BranchIntHandler);
void LPCOMP_COMP_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI1_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI2_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI3_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI4_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI5_IRQHandler(void) ALIAS(BranchIntHandler);
void UART0_IRQHandler(void) ALIAS(BranchIntHandler);
void RTC1_IRQHandler(void) ALIAS(BranchIntHandler);
void GPIOTE_IRQHandler(void) ALIAS(BranchIntHandler);
void SWI0_IRQHandler(void) ALIAS(BranchIntHandler);