Зачем убивать?! просто не вызывать. Мой подход: Каждый автомат содержит функции
1 Конструктор, вызывается до главного цикла, в конструкторе вызываются конструкторы вложенных автоматов
2 Методы управления, отправка сообщений автомату
3 Главный метод, вызывается в главном цикле, из него вызываются главные методы вложенных автоматов
Для примера, интерфейс автомата управления реверсивным контактором:
typedef struct
{
Timer_t Tim1;//таймер переключения 1
Timer_t Tim2;//таймер переключения 2
unsigned long ZadPerkl;//задержка переключения
unsigned char Out1;//выходной порт 1
unsigned char Out2;//выходной порт 2
unsigned char In1;//входной порт 1
unsigned char In2;//входной порт 2
unsigned char raz1;//разрешения включения 1
unsigned char raz2;//разрешения включения 2
}
ReversKontakt_t;
//Инициализация контактора
void ReversKontaktInit(ReversKontakt_t* s,unsigned long ZadPerkl);
//Включить контакт 1
void ReversKontaktOn1(ReversKontakt_t* s);
//Включить контакт 2
void ReversKontaktOn2(ReversKontakt_t* s);
//Выключить контакты
void ReversKontaktOff(ReversKontakt_t* s);
//Главный метод контактора
void ReversKontakt(ReversKontakt_t* s);