És mutass egy architektúrát, ahol a megszakítás ABI-ja megegyezik a normál függvényhívás ABI-jával. Nem is létezik ilyen architektúra!
Itten, ni, peldaul:
/* ... */
uint32_t * RAM_VECTORS[48] __attribute__ ((section(".ramvectors")));
/* ... */
void USART1_IRQHandler(void)
{
packet_t *packet;
packet=(packet_t *)buffer_in_rs485;
if ( USART1->ISR & USART_ISR_RXNE )
{ /* ... */
}
}
int irq_setup(void)
{
/* ... */
RAM_VECTORS[16+USART1_IRQn ]=(uint32_t *)USART1_IRQHandler;
/* ... */
SYSCFG->CFGR1 |= SYSCFG_CFGR1_MEM_MODE_1|SYSCFG_CFGR1_MEM_MODE_0;
return(0);
}
/* ... */
int main(void)
{
/* ... */
irq_setup();
/* ... */
USART1->CR1 |= USART_CR1_RE|USART_CR1_TE;
USART1->CR1 |= USART_CR1_UE;
USART1->CR1 |= USART_CR1_RXNEIE;
NVIC_EnableIRQ(USART1_IRQn);
NVIC_SetPriority(USART1_IRQn,0);
/* ... */
}
Mindezt pedig:
$ make ...
arm-none-eabi-gcc -mcpu=cortex-m0 -mthumb -masm-syntax-unified -specs=nano.specs -specs=nosys.specs -Wl,--gc-sections # ...