Просто надо разложить ситуацию на составляющие.
Исходные данные: программист настроил прерывание, но забыл для него сделать соответствующий обработчик. Это безусловно грубая ошибка, в результате которой программа не работает. Итак - программа не работает, как должна.
А теперь варианты развития событий.
1. Программист забил таблицу неиспользуемых векторов reti. Девайс прошивается и включается. Разработчик видит, что девайс ведет себя не так как надо: меню работает, всякие сообщения вводятся-выводятся, но какая-то часть функций не работает. Начинаются ковыряния с отладчиком - оновноной код отрабатывает отлично, имеющиеся в программе обработчики прерываний отрабатывают отлично - а программа не верно работает... Программист в панике.
2. Программист забил таблицу неиспользуемых векторов заглушками rjmp pc+0. Девайс прошивается и включается. Разработчик видит, что девайс не работает вообще. Т.е. что-то мигнуло, что-то выдалось, и после этого зависло. При помощи аппаратного отладчика, если он есть, мгновенно находит место, где программа висит, и это место - четко в таблице векторов. Всё, программист нашел свою плюху - отсутствие обработчика этого вектора. Аналогичное решение в симуляторе.
3. Программист забил таблицу неиспользуемых векторов переходами на единственную заглушку rjmp pc+0. Как и в п.2 всё висит, в отладчике видно только одно - висим в заглушке. Это не говорит ничего о том, откуда мы попали в заглушку, но все равно легко просмотреть таблицу и найти вектор без обработчика. Решение чуть-чуть сложнее, чем в п.2, но все равно элементарно.
4. Таблицу векторов заполнил компилятор avr-gcc, т.е. при необслуживаемом прерывании происходит сброс программы. В отличие от предыдущих двух вариантов программа, в зависимости от того, как часто происходят запросы необрабатываемого прерывания, либо вообще практически не стартует (визуально), либо проходит начальную инициализацию и сбрасывается. В плане диагностики этот вариант хуже, чем предыдущие два, но все равно однозначно говорит программисту о необходимости смотреть в таблицу векторов, не гадая.
В корректно написанной программе абсолютно все равно, что будет в таблице векторов на неиспользуемых местах, согласны?
Итак, вывод: вариант с reti в пустых ячейках таблицы векторов - наихудший при отладке и поиске проблем. Наилучший вариант - заполнение неиспользуемых ячеек заглушками rjmp pc+0. Компромиссные варианты - с единственной заглушкой или со сбросом.
Убедил?
