ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
35190 Топик полностью
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; } }