Beispiel #1
0
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");
}
Beispiel #4
0
void interruptReturn(void) {
        RESTORE_CONTEXT();
        asm volatile("reti");
}