Цитата(vvppvv @ May 31 2011, 21:14)

У меня перед объявлением программ прерываний стоИт __raw.
Как тут на форуме кто-то сказал - "в японии проходит ежегодный конкурс на самое сложное решение простой задачи, может быть вам стоит отправить туда и свое решение?" )
Особый интерес наверняка проявят к программке-доработке компилятора, для анализа используемых регистров в подменяемых функциях. )
Цитата
как Вы говорите, "тупо" сохранять все регистры.
Отлично, и пусть сохраняет. Обеспечивается максимальная гибкость - там где требуется гибкость, там нет требований к скорости исполнения, потому что это взаимоисключающие вещи.
Цитата
У меня перед объявлением программ прерываний стоИт __raw. Поэтому были составлены специальные inline-функции interrupt_entry (); и interrupt_exit ();
Вопрос в том насколько легко подцепить туда любую другую функцию после этого - тобиш вопрос поддержки проекта и расширения функционала.
Гораздо проще объявить __interrupt без __raw, и без ручных пролога и эпилога, тогда он сохранит все регистры из-за используемого внутри косвенного вызова, а саму, вызываемую косвенно, функцию обьявить с __raw.
Цитата
Тупо можно на этапе изучения контроллера, системы команд и написания первых "Hello, World". Дальше "тупо" - не надо.
Именно так - тупо - и используется в наиболее серьезных проектах. В больших и сложных проектах - простота реализации - залог успеха. Минимизировать нужно число IRQ где возможно - если можно обрабатывать сразу несколько прерываний от нескольких источников. Не нужно доводить до абсурда задачу минимизации кода отдельно взятого обработчика с подсчетом используемых регистров в каждой функции взависимости от сборки компилятора и ключа оптимизации (что наверняка вы со своим ручным прологом и делаете).
Бывают и другие цели, для их достижения приходится жертвовать гибкостью, - в этом случае лучше просто использовать по максимуму возможности конкретной архитектуры и используемого инструментария. В контексте IAR под AVR это - вообще не вызывать никаких функций из обработчика прерываний, и иметь всегда строго один обработчик на одно прерывание. Еще лучше возможно будет писать весь проект на ASM, но это подходит только для задач по сложности типа контроллера светодиода.