Degson: клеммы, корпуса, источники питания
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 243
255 178
538 320
 
29.10.2022 08:17 #1
Здравствуйте.
Есть потребность вместить в одну программу в arduino IDE четыре разных. Условно говоря, к МК подключены 4 кнопки и при старте первом делом опрашиваются они, этот опрос и задает какая программа будет работать дальше. Все четыре программы друг от друга независимы, и возврат из любой из них не предусмотрен в принципе. Т.е. выбор программы происходит исключительно по RESET.
Проблема состоит том, что нужно менять не только пути в loop, но и содержимое и setup, и содержимое ДО setup - например настройку прерываний.
Я попытался решить эту проблему с помощью переноса всех настроек в loop с дальнейшим ветвлением с использованием в каждой ветке своего бесконечно цикла while(1), но из этого ничего не получилось.
Кто-нибудь сталкивался с такой проблемой?
Оценка
В многообразии литиевых батареек и аккумуляторов нет какого-то универсального или идеального варианта. Выбирая тот или иной вариант для питания устройства, разработчику приходится оперировать множеством параметров, используя наиболее оптимальное их сочетание для каждого приложения. Разберем параметры для различных приложений.
Новичок
 
Регистрация: 07.11.2010
Сообщений: 58
Репутация: 23
13 32
0 2
 
31.10.2022 09:26 #2
Чёта Вы замудрили... Не надо ничего делать "ДО setup", всё одноразовое делайте в setup. Включая опрос кнопок и присваивание переменной doThen числа от 1 до 4. А в loop проверяете её значение и вызываете соотв. п\программу.
Оценка
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 243
255 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
Репутация: 243
255 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
Репутация: 243
255 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
Репутация: 243
255 178
538 320
 
01.11.2022 12:01 #9
Задача легко реализуется, если поставить на МК ОС. Но ОС требует ресурсы, а при наличии ресурсов задача становится никчемной.
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 13:54.
Обратная связь РадиоЛоцман Вверх