djsnakebest
@djsnakebest
Чиню паяю , Ардуино проекты , разработка устройств

Несколько параллельных программ на AVR (или stm)?

Доброго всем времени суток!
Направьте на путь правильный навичька) Заранее благодарен всем кто откликнулся!
Каким образом выполнять несколько процессов(при условии постоянного мониторинга и моментальной реакции на условия в цикле "if") не останавливая основной цикл программы?
Как это реализовать?
В том числе и срабатывание условия по прошедшему времени.
На пример - считываем показания с четырех датчиков - каждому датчику свои каналы управления - один или несколько
при наступлении нужного времени по графику управляем одним или неколькими каналами независимо..
в то время как по графику крутится шаговой мотор - датчик температуры сработал - включилось релле
тут датчик влажности сработал - включил вентилятор
(а мотор крутит еще)
потом время пришло - и дверь на проветривание открывается..
и так далее..
Как такое реализовать то?
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 7
Основной цикл крутиться, а доп. задачи по прерываниям (от таймеров, от изменения входного сигнала и т.д.), либо в простое проверять условия. Судя по описанию задачи жесткий реалтайм не нужен и разбег в микросекунды-миллисекунду не критичен.

Либо, если хочется чего-то интересного и познавательного, то на stm32 есть "из коробки" freeRTOS, будет у вас целая ОС со своими процессами. :) (на остальное, думаю, тоже можно найти свою RTOS) По крайней мере можете почитать принцип работы и возникнут идеи, как сделать свою многозадачность.
Ответ написан
BasiC2k
@BasiC2k
Через переменные - флаги.
Флаг - мотор крутится или нет
Флаг (значение) датчика 1
и тд
Ответ написан
@lonelymyp
Живу
Что за такой основной цикл, что его нельзя прерывать?
Всё можно прерывать, если ненадолго.
Управление мотором надеюсь сделано через аппаратный шим? Тогда чтобы поменять параметры вращения мотора надо однократно изменить параметры шим, изменил - мотор будет дальше крутиться сам по себе с новой скоростью, в основной программе проверяй датчики или что там ещё что нужно.
Ответ написан
@AlexSku
Программист по автоматике
По хорошему вам надо изучить один из языков ПЛК SFC (граф состояний). Там возможна параллельная структура (примеры в Codesys).
Есть аналог в Матлабе - Stateflow (там параллельные структуры обозначены пунктиром). В Матлабе можно граф скомпилировать на язык контроллера ST (структурированный текст типа Паскаля).
Пример видео.
Ответ написан
@evgeniy_lm
В любом МК есть такая штука как прерывания, например в Atmega328 (это тот который в Arduino) их аж 26 на все железо что там есть. Для синхронизации процессов целых три таймера. По хорошему основная программа состоит из пустого бесконечного цикла, а вся логика работы раскидана по обработчикам прерываний.
Нужно понимать, что в МК AVR прерывания не имеют приоритета и выполняются по мере возникновения. Во время работы обработчика прерываний обработка других прерываний автоматически отключается, а поле выхода по команде RETI включается. Если за время работы одного прерывания возникли другие то они будут обработаны по завершению в порядке их нумерации. Если возникло прерывание такого же типа что обрабатывается в данный момент то оно обработано не будет
В STM система прерываний более сложная и еще там есть DMA
Ответ написан
djsnakebest
@djsnakebest Автор вопроса
Чиню паяю , Ардуино проекты , разработка устройств
е вариант с флагами как работать будет?.. мож он лучше?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы