void arm_cm_irq_exit(bool reschedule) { if (reschedule) arm_cm_trigger_preempt(); KEVLOG_IRQ_EXIT(__get_IPSR()); dec_critical_section(); }
void sam3_uart_irq(void) { inc_critical_section(); unsigned char c; if (uart_read(UART, &c) == 0) { cbuf_write(&debug_rx_buf, &c, 1, false); cm3_trigger_preempt(); } dec_critical_section(); }
/* use systick as the kernel tick */ void _systick(void) { inc_critical_section(); bool resched = false; ticks += 10; if (cb) { if (cb(cb_args, ticks) == INT_RESCHEDULE) resched = true; } if (resched) { // have the cortex-m3 queue a preemption cm3_trigger_preempt(); } dec_critical_section(); }