HRP-N3 - серия источников питания с максимальной пиковой мощностью в 350% от MEAN WELL
Специалист
 
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,752
Репутация: 242
254 177
537 320
 
29.10.2022 08:17 #1
Здравствуйте.
Есть потребность вместить в одну программу в arduino IDE четыре разных. Условно говоря, к МК подключены 4 кнопки и при старте первом делом опрашиваются они, этот опрос и задает какая программа будет работать дальше. Все четыре программы друг от друга независимы, и возврат из любой из них не предусмотрен в принципе. Т.е. выбор программы происходит исключительно по RESET.
Проблема состоит том, что нужно менять не только пути в loop, но и содержимое и setup, и содержимое ДО setup - например настройку прерываний.
Я попытался решить эту проблему с помощью переноса всех настроек в loop с дальнейшим ветвлением с использованием в каждой ветке своего бесконечно цикла while(1), но из этого ничего не получилось.
Кто-нибудь сталкивался с такой проблемой?
Оценка
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей.
Новичок
 
Регистрация: 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,752
Репутация: 242
254 177
537 320
 
31.10.2022 11:05 #3
abomin, попробуйте вставить в setup например AsyncWebServer server(80), а потом расскажите здесь, что из этого у Вас получилось.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 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,752
Репутация: 242
254 177
537 320
 
31.10.2022 14:42 #5
Всё это мне известно, и я это уже делаю.
Но из-за сильной ограниченности ресурсов МК постоянно сталкиваюсь с артефактами.
Например после отключения SPIFFS его запреты на прерывания оказываются не отмененными, как ожидалось. А чтобы избежать этого, надо SPIFFS не запускать, а это неприемлемо, т.к. данные для программ содержатся в файловой системе.
Вот такое заморочки...
Поэтому и хотелось бы и разделить задачи ПОЛНОСТЬЮ, т.е. чтобы они никоим образом не были связаны между собой. Типовой способ - загрузчик, который на старте загружает в память выбранную кнопками прошивку в МК. Но я представления не имею, как это сделать в ардуино IDE.
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 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,752
Репутация: 242
254 177
537 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,752
Репутация: 242
254 177
537 320
 
01.11.2022 12:01 #9
Задача легко реализуется, если поставить на МК ОС. Но ОС требует ресурсы, а при наличии ресурсов задача становится никчемной.
Оценка
Ответ
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

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

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