Этo_Я_oпять (14.12.2003 16:04, просмотров: 1) ответил 0men на 90% того, что глючит Ваша программа :) у меня проект под 2.28 при любом уровне оптимизации не глючил, 3.10 жду когда скачается, скажу потом что получилось :)
Это вы зря так (+) Баг с оптимизацией по размеру давно известен в 2.28A.
Связан он с тем, что библиотечные пролог/эпилог векторов
прерываний, который подключается при оптимизации по размеру,
не сохраняет регистр R0. Баг этот сразу и не заметишь, но
программа может спонтанно глючить, если вектор и main используют
регистр R0 - например, если используются команды MUL или LPM.
Оптимизация же по скорости не использует библиотечные
пролог/эпилог, что позволяет напрочь избежать такой бяки
(кстати, очень трудно диагностируемой).
Лечится, правда, это просто - перед каждым вектором
достаточно поставить #pragma optimize=s. Что я и делал везде и
всегда, на всякий случай. Но оптимизатор по размеру в 2.28А
давал обычно код большего размера, чем оптимизатор по скорости,
поэтому как-то даже и не приходилось его использовать.
З.Ы. Кстати, интересно посмотреть на листинг вектора,
использующего R0 и R1 (с MUL, например) в новом компиляторе.
Может, там уже грамотно написали прологи.