
enum Tstate {IDLE, ACTIVE};

void task1(void)
{
    static enum Tstate state = 0;

// Any 'while' statement in here could possibly cause a lock-up!

    switch (state)
    {
        case IDLE:
            if (key==1)
                state = ACTIVE;
            break;
        case ACTIVE:
            if (key==2)
                state = IDLE;
            break;
    }
}

void main(void)
{
    while (1)
    {
        task1();
        task2();
    }
}