Специалист
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
|
Здравствуйте.
Есть потребность вместить в одну программу в arduino IDE четыре разных. Условно говоря, к МК подключены 4 кнопки и при старте первом делом опрашиваются они, этот опрос и задает какая программа будет работать дальше. Все четыре программы друг от друга независимы, и возврат из любой из них не предусмотрен в принципе. Т.е. выбор программы происходит исключительно по RESET. Проблема состоит том, что нужно менять не только пути в loop, но и содержимое и setup, и содержимое ДО setup - например настройку прерываний. Я попытался решить эту проблему с помощью переноса всех настроек в loop с дальнейшим ветвлением с использованием в каждой ветке своего бесконечно цикла while(1), но из этого ничего не получилось. Кто-нибудь сталкивался с такой проблемой? |
||
Оценка
|
Новичок
Регистрация: 07.11.2010
Сообщений: 60
Репутация: 23
|
Чёта Вы замудрили... Не надо ничего делать "ДО setup", всё одноразовое делайте в setup. Включая опрос кнопок и присваивание переменной doThen числа от 1 до 4. А в loop проверяете её значение и вызываете соотв. п\программу.
|
||
Оценка
|
Специалист
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
|
Честно говоря проблема кажется надуманной. У Вас всё-равно будет где-то примерно такой код:
Цитата:
wifi_start;
while(wifi.status() != connected) {}; server_start; Цитата:
switch(prog_number): { case(0){}.... case(3){}};
Или вопрос был как без флагов организовать ветвление и сэкономить? Или вообще использовать изолированные области памяти?
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc. |
||
Оценка
|
Специалист
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
|
Всё это мне известно, и я это уже делаю.
Но из-за сильной ограниченности ресурсов МК постоянно сталкиваюсь с артефактами. Например после отключения SPIFFS его запреты на прерывания оказываются не отмененными, как ожидалось. А чтобы избежать этого, надо SPIFFS не запускать, а это неприемлемо, т.к. данные для программ содержатся в файловой системе. Вот такое заморочки... Поэтому и хотелось бы и разделить задачи ПОЛНОСТЬЮ, т.е. чтобы они никоим образом не были связаны между собой. Типовой способ - загрузчик, который на старте загружает в память выбранную кнопками прошивку в МК. Но я представления не имею, как это сделать в ардуино IDE. |
||
Оценка
|
Специалист
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
|
Цитата:
Например после отключения SPIFFS его запреты на прерывания оказываются не отмененными, как ожидалось. А чтобы избежать этого, надо SPIFFS не запускать, а это неприемлемо.
__________________
Atmel, STM32, ESP32, RTOS, OS-less, C, C++, C#, Visual Studio, IAR, Altium, Micro-Cap, Maple, MatLab, etc. |
||
Оценка
|
Специалист
Регистрация: 26.10.2020
Адрес: Омск
Сообщений: 1,753
Репутация: 245
|
Однако скорее всего придется перейти на более мощный МК. Он у меня есть, и для него всё есть, но мне хотелось пристроить слабенький, он у меня давно без дела валялся, и задача, как казалось, ну прямо под него. Значит не судьба...
|
||
Оценка
|
Ответ |
|
|
Обратная связь РадиоЛоцман Вверх |