Необходимо программно перезагрузить Pro Mini. Пробовал Код (C++): asm volatile ("jmp 0"); - зависает! Подскажите, что может "вешать" Ардуину? Читал о возможности перезагрузки через вачдог, но там загрузчик предлагают перепрошивать - крайне не желательно
Выкидывай загрузчик. Ну или смени его на тот, который при перезагрузке по вачдогу передает управление основной программе.
Самое простое решение - дергать за ресет (хоть его и не рекомендуют). И не забыть пин, который дергать будет, в сетапе сразу поднять. Вот тут подробно с картинками.
Пока не буду - места еще хватает, да и все в процессе отладки, при этом ноги все задействованы - не нужно каждый раз переподключать. Значит придется ставить https://github.com/Optiboot/optiboot Неее, я в такие "костыли" не играю!
Смотрю в сторону оптибута, тока времени свободного пока нет. Про-мини у меня вместе с esp-01 работает, по rx/tx общается. esp по воздуху обновляется, а для обновления про-мини приходится проводами подключать, отключая на это время esp. Положил бы загрузчик на esp, сказал бы про-мини идика на рестарт и обновил бы. Всё никак не соберусь.
@parovoZZ Правда ваша даташит раздел 13.2.1 Configuring the Pin, пины как входы и пулл-апы выключены.
Одного перехода на нулевой адрес мало. Т.к. все регистры остануться в тех состояниях, которые были на момент перехода, за исключением регистра SREG и стека (SPH, SPL). Поэтому смотрите по коду, что может подвесить контроллер...
Открою для тебя страшную тайну -- есть сброс аппаратный (hardware reset), а есть программный (soft reset). Так вот в некоторых процессорах программный сброс -- это переход на нулевой адрес. И, если правильно организовать инициализацию микроконтроллера при старте программы (т.е. позаботиться о настройке всех регистров, даже не используемых), то программная перезагрузка будет работать корректно.
Стартует. Контроллеры AVR (и некоторые другие) стартуют с нулевого адреса. И в контроллерах AVR нулевой адрес это обработчик прерывания RESET, который производит определённую настройку контроллера и запуск основной программы. Но все эти опреации делаются, если собираете программу на C/C++. Если на ассемблере, то все операции по инициализации контроллера лежат на плечах программиста.
Но есть одно "НО" -- при аппаратном сбросе все регистры сбрасываются в "дефолтное" значение, а при программном нет. Точнее некоторые инициализируются (см. пост выше), но остальные остаются без изменений.
Пол дня промучился пока прошивку в USBasp залил через UNO. Добавил в IDE OptiBoot. Выбрал плату "Arduino Pro or Pro Mini" и МК ATmega328P. По идее меню "Инструменты"->"Записать загрузчик" должен записаться OptiBoot? Записалось секунд за 5 без ошибок. А как узнать, какой загрузчик прошит?
скачать его, вычислить хеш. Сравнить с хешом предполагаемого загрузчика. Либо сравнить вчистую хексы.