После нажатия на кнопку 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.