ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
272429 Топик полностью
Лeoнид Ивaнoвич (15.09.2011 13:30, просмотров: 642) ответил Vladimir Ljaschko на Я спрашивал автора 100 автоматов, но не получил ответа. В моих приборах реальных автоматов состояний с переменной состояния до 15. Поддержку функции с одним -двумя флагами/счетчиками, функционирующую без воздействия извне(ну, например, усреднение
Тут больше жонглирование словами. Как назвать - автомат, процесс, задача, от этого суть не меняется. Я обычно называю "процесс" (от одноименного произведения Франца Кафки :) Процессы реализованы в отдельных модулях программы и отвечают за какую-то подсистему устройства. Например, автомат промывки трубопроводов. Main.с - основной модуль. Главный исполняемый фрагмент: while(1) { tick = Main_GetTick(); //проверка системного таймера sec = RTC_Update_Time(); //обновление текущего времени Process_Exe(tick, sec); //выполнение процессов Menu_Exe(tick, sec); //обработка меню Main_Rst_Wdt(tick); //рестарт watchdog-таймера } Process.с - руководит всеми процессами, собирает их в единую последовательность. void Process_Exe(bool t, bool s) { Flow_Exe(t); //измерение расхода воды Level_Exe(t); //измерение уровня воды DS18B20_Exe(t); //измерение температуры воды Fill_Exe(s); //выполнение процесса наполнения Solute_Exe(s); //выполнение процесса смешивания Heat_Exe(s); //выполнение процесса нагрева if((Proc != PR_STOP) && //если запущен какой-то процесс (Proc != PR_DONE) && (Proc != PR_ERROR)) { ... выполнение алгоритмов Menu.с - редактирует параметры для Process и запускает ту или иную последовательность. Также индицирует прогресс. Fill.с - процесс налива Solute.с - процесс смешивания Heat.с - процесс нагрева Вспомогательные модули: Flow.с - измерение расхода Level.с - измерение уровня DS18B20.с - измерение температуры RTC.с - служба времени Relays.с - управление аппаратурой и т.д. Каждый процесс имеет простой интерфейс, который описан в соответствующем h-файле. Например, Fill.h: void Fill_Init(void); //инициализация модуля налива void Fill_Exe(bool t); //выполнение процесса налива void Fill_Start(char w, int v); //запуск процесса налива void Fill_Stop(void); //остановка процесса налива bool Fill_TopOrDone(void); //проверка верхнего уровня или объема bool Fill_Done(void); //проверка объема int Fill_GetV(void); //чтение текущего объема Вспомогательные модули тоже имеют простой интерфейс. Например, Flow.h: void Flow_Init(void); //инициализация измерителя уровня void Flow_Exe(bool t); //выполнение процесса измерения int Flow_GetV(void); //чтение показаний void Flow_Clear(void); //очистка показаний