Популярные микроконтроллеры Nuvoton серий М2354 и М251 со склада компании Смарт-ЭК

Arduino IDE, 4 программы в одной

Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
256 178
538 320
 
29.10.2022 08:17 #1
Здравствуйте.
Есть потребность вместить в одну программу в arduino IDE четыре разных. Условно говоря, к МК подключены 4 кнопки и при старте первом делом опрашиваются они, этот опрос и задает какая программа будет работать дальше. Все четыре программы друг от друга независимы, и возврат из любой из них не предусмотрен в принципе. Т.е. выбор программы происходит исключительно по RESET.
Проблема состоит том, что нужно менять не только пути в loop, но и содержимое и setup, и содержимое ДО setup - например настройку прерываний.
Я попытался решить эту проблему с помощью переноса всех настроек в loop с дальнейшим ветвлением с использованием в каждой ветке своего бесконечно цикла while(1), но из этого ничего не получилось.
Кто-нибудь сталкивался с такой проблемой?
Оценка
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO.
Новичок
 
Регистрация: 07.11.2010
Сообщений: 60
Репутация: 23
13 33
0 2
 
31.10.2022 09:26 #2
Чёта Вы замудрили... Не надо ничего делать "ДО setup", всё одноразовое делайте в setup. Включая опрос кнопок и присваивание переменной doThen числа от 1 до 4. А в loop проверяете её значение и вызываете соотв. п\программу.
Оценка
КОМПЭЛ продолжает поддерживать и расширять список складских позиций Hongfa, представленных электромеханическими реле. Продукция компании активно применяется в таких областях, как промышленность, энергетика, бытовые приборы, автомобильная отрасль и специальная техника, требующая высокой надежности и на сегодняшний момент может легко заменить электромеханические реле ушедших из РФ брендов.
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
256 178
538 320
 
31.10.2022 11:05 #3
abomin, попробуйте вставить в setup например AsyncWebServer server(80), а потом расскажите здесь, что из этого у Вас получилось.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 0
3 0
 
31.10.2022 14:32 #4
Честно говоря проблема кажется надуманной. У Вас всё-равно будет где-то примерно такой код:
Цитата:
wifi_start;
while(wifi.status() != connected) {};
server_start;
Поэтому логичным кажется после старта опросить кнопки, затем ввалиться в единый основной цикл, где будет
Цитата:
switch(prog_number): { case(0){}.... case(3){}};
В каждом case при первом заходе делать настройки и поднимать флаг о том, что настройки сделаны. При повторных заходах проверять флаги setup0....setup3 и пропускать эту часть. Далее видятся всё те же switch(prog_number), внутри которых указатели на функции с кодом подпрограмм.

Или вопрос был как без флагов организовать ветвление и сэкономить? Или вообще использовать изолированные области памяти?
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc.
Оценка
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
256 178
538 320
 
31.10.2022 14:42 #5
Всё это мне известно, и я это уже делаю.
Но из-за сильной ограниченности ресурсов МК постоянно сталкиваюсь с артефактами.
Например после отключения SPIFFS его запреты на прерывания оказываются не отмененными, как ожидалось. А чтобы избежать этого, надо SPIFFS не запускать, а это неприемлемо, т.к. данные для программ содержатся в файловой системе.
Вот такое заморочки...
Поэтому и хотелось бы и разделить задачи ПОЛНОСТЬЮ, т.е. чтобы они никоим образом не были связаны между собой. Типовой способ - загрузчик, который на старте загружает в память выбранную кнопками прошивку в МК. Но я представления не имею, как это сделать в ардуино IDE.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 0
3 0
 
31.10.2022 15:19 #6
Цитата:
Например после отключения SPIFFS его запреты на прерывания оказываются не отмененными, как ожидалось. А чтобы избежать этого, надо SPIFFS не запускать, а это неприемлемо.
Да, это кажется реальной проблемой. А что там в иcходниках FS, java? Использовать не доводилось, но, видимо, это и есть плата за простоту.
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc.
Оценка
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
256 178
538 320
 
31.10.2022 18:23 #7
Однако скорее всего придется перейти на более мощный МК. Он у меня есть, и для него всё есть, но мне хотелось пристроить слабенький, он у меня давно без дела валялся, и задача, как казалось, ну прямо под него. Значит не судьба...
Оценка
Новичок
 
Регистрация: 19.08.2012
Сообщений: 51
Репутация: 16
6 0
0 0
 
01.11.2022 09:41 #8
Цитата:
Сообщение от ART_HA
Значит не судьба...
4 кнопки включают каждая свой Ардуино.
Оценка
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
256 178
538 320
 
01.11.2022 12:01 #9
Задача легко реализуется, если поставить на МК ОС. Но ОС требует ресурсы, а при наличии ресурсов задача становится никчемной.
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Скидки, кэшбэк и бесплатная доставка от ТМ Электроникс
Часовой пояс GMT +3, время: 01:40.
Обратная связь РадиоЛоцман Вверх