Цитата(KRS @ Sep 6 2006, 10:24)

Что значит цикл case???
на case IDLE_HAS_KEY: вы попадете только когда оператор switch(State) выполнится заново и при этом State будет = IDLE_HAS_KEY
switch - это всего лишь переключатель в зависимости от State делается JUMP в нужную точку
если хотите в этой же итерации попасть туда используйте goto
например так:
Код
switch(State) {
...
case IDLE: // этот код выполняется если снято с охраны
off(LED);
if( one_wire_main () ) { //если что-то приложили (ключ)
if(USER_KEYS()) {
State = IDLE_HAS_KEY;
goto _IDLE_HAS_KEY:
}
}
break;
case IDLE_HAS_KEY:
_IDLE_HAS_KEY:
...
Совет правильный, но вообще-то использование команды goto является плохим стилем программирования и очень затрудняет отладку. Лично я построил бы диспетчер следующим образом:
Код
do{
State = IDLE;
off(LED); // этот код выполняется если снято с охраны
...
if( one_wire_main () && USER_KEYS()) //если приложили правильный ключ
State = IDLE_HAS_KEY;
if( ... ) //другое событие
State = ...;
if( ... ) //n-е событие
State = ...;
}while(State == IDLE);
switch(state)
{
case IDLE_HAS_KEY:
...
break;
case ...:
...
break;
default:
...
break;
}
Ну и все это, разумеется, крутится в бесконечном цикле.