( apal | 2024. 07. 25., cs – 15:19 )

É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 # ...