VLLV (11.07.2005 15:38, просмотров: 1) ответил Artem на Хотелось бы примерчик взглянуть на Си, чтобы понятнее было как это реализовать..
если коротко, то так... Идея простая - состояние прибора описывается переменной status - выполняется функция из массива, которая обрабатывает события. ПРЕДИСТОРИИ СОСТОЯНИЙ В СТЕКЕ БЫТЬ НЕ ДОЛЖНО! Предполагается, что память при сбросе не портится, так как супервизор надежно останавливает МК.
массив функций
const VECTORS process[stQty] =
{
f0Start, //00
f1SelfTest, //01
f2Waiting, //02
.....
}
Основная программа
__task void main (void)
{
InOutConfiguration();
InitProcessService();
__enable_interrupt();
for(;;)
{ event=GetEvent();
process[status];
}
}
В функции InitProcessService() анализируется, горячий это старт или холодный.
void InitProcessService(void)
{ if (low_power_enable && //признак, что устройсто было в рабочем режиме
( (status==st2Waiting)| //защищаемые от помех состояния
(status==st24Filling)|
)
) RestartValves() ; // перезапуск некоторых процессов
else { status=st0Start; // или запуск сначала
low_power_enable=0;
}
}