по поводу увеличения размера кода "свежими" версиями - я тут создавал
темку, где мне доступно объяснили, что есть масса ключей оптимизации, которые позволяют и свежей версией получить минимальный размер кода. в моем случае я довольно легко добился
лучшего результата, чем при сборке старой версией. возможно, немножко обидно, что раньше маленький код получался сам, а теперь надо какие-то опции включать-выключать и т.п. - однако, никто не сравнивал "старый" и "новый" код по быстродействию, например? может, размер - не самое главное? тем более когда речь не о килобайтах, а о байтах разницы.
раньше, например, когда писалось
PORTB |= _BV(PB1); компилятор всегда генерировал код с обращением к ячейке памяти по соответствующему адресу, т.е. делал минимум 3 команды:
LDS,
ORI и
STS. это было очень хорошо (с одной стороны), так как легко позволяло обращаться к порту по указателю, но по скорости
SBI все-же гораздо лучше. и вот в последней версии заметил, что теперь генерируется именно
SBI! причем при обращении через указатель получается "старый" вариант - ведь лучше же стало, а?!

хотя странности присутствуют все равно в коде
Я бы взял частями... но мне надо сразу.