Зачем в конец программы? Есть же отдельная область памяти - EEPROM. И вообще, как в AVR правильно контролировать целостность программы
В booloader-е считается CRC всей application section и сравнивается с CRC из EEPROM. Если совпало, то можно запускать application. если нет - виснем в booloader-е пока не закачаем валидную application.
P.S. В xmega CRC можно даже аппаратно подсчитать. Очень удобно.