24 января 2018 г.

Как перезагрузить Arduino (программный рестарт)

После нажатия на кнопку RESET, а также по сигналу DTR микросхемы FT232R на плате Arduino Duemilanove или по сигналу на выводе D7 микросхемы ATmega8U2 платы Arduino Uno, управление передаётся загрузчику (bootloader) Arduino, расположенному в верхних 2 КБ памяти программ (Flash) (адрес 0x7800 для микроконтроллера ATmega328p). Загрузчик проверяет, есть ли связь с Arduino IDE, а затем передаёт управление по адресу 0x0000 памяти программ, где расположен код скетча.
Таким образом, чтобы перезагрузить Arduino программным способом (теплый рестарт или soft reset), достаточно добавить в скетч функцию программного сброса:
void softReset()
{
    asm volatile ("jmp 0");
}
Вызов этой функции приведёт к программному рестарту скетча Arduino.