Цитата(demiurg_spb @ Nov 23 2012, 11:24)

И что? регистровая пара Y тоже двухбайтная. Что случится если изменили только её один байт, а в это время приходит вложенное прерывание и начинает выделять для себя место на стеке по кривому указателю Y. Или вы хотите сказать что в ИАРе прерывания не используют стек данных вовсе? Если так, то вы правы. Подтвердите или опровергните эту мысль пожалуйста.
IAR в большинстве случаев использует атомарные операции и не обращается к Y по частям!
ST -Y, LD Y+, SBIW, ADIW так что никаких конфликтов нет!
Исключение если размер локальных переменных функции больше 64 байтов или параметров в стеке слишком много. Но такое для АВР редкость, а в прерываниях вообще не должно быть такого кода.
И кстати тогда бы и в обычных функциях надо было бы перед выходом запрещать прерывания

Это как раз у GNU проблемы из-за того что стек один используют, а регистра нормального нет! В итоге код оптимальный только если в регистры все помещается, если нет - то все равно Y используют как BP, но код входа и выхода из функции кривой с запретом прерываний!