void nOS_SwitchContext(void) { SAVE_CONTEXT(); nOS_runningThread = nOS_highPrioThread; RESTORE_CONTEXT(); asm volatile ("ret"); }
void port_reschedule(void) { SAVE_CONTEXT(); log_line(running_task->name); log_string(" --> "); reschedule(); timer_tick = RR_TIMEOUT_MS; log_string(running_task->name); RESTORE_CONTEXT(); /* The RETI instruction enables interrupts. */ __asm__ __volatile__ ("reti \n\t"); }
ISR(TIMER0_COMP_vect, ISR_NAKED) { SAVE_CONTEXT(); /* Decide if a task change shall occur. We know that running_task is in the ready list. */ if (0 == timer_tick) { list_remove_node((Node *) running_task); list_enqueue(&ready_tasks, (Node *) running_task); reschedule(); timer_tick = RR_TIMEOUT_MS; } else { timer_tick--; } RESTORE_CONTEXT(); __asm__ __volatile__ ("reti \n\t"); }
void interruptReturn(void) { RESTORE_CONTEXT(); asm volatile("reti"); }