Цитата(=AK= @ Dec 27 2007, 23:44)

Для начала попробуйте скомпилировать на WinAVR с максимальным уровнем оптимизации -O3.
НИ В КОЕМ СЛУЧАЕ!
Это рекомендация годится только для форисрования перехода на IAR :-)
GCC с опцей -O3 как минимум
- инлайнит всё что можно насколько можно, т.е. даже не объявленные как inline и довольно крупные функции с очень большой степенью вероятности будут вставлены по месту
- разворачивает циклы - если цикл с известным на момнет компиляции числом проходов, то при небольшом числе проходов вообще может всё в линию вытянуть. При неизвестном - запросто сгенерирует два тела цикла подряд, проверит на чётность предел, отдельно для нечётного выполнит одно тело, а счётчик для удвоенного тела поделит на два.
Т.е. девиз ключа -O3 - "быстродействие любой ценой, размер не играет значения".
Для AVR, как уже было сказано, в 98% случаев оптимальный результат с ключиком -Os.
Полезно дать ключик --relax линкеру (-Wl,--relax если для линковки вызывается gcc, а не ld). Линкер при этом
делает анализ кода, заменяет длинные переходы/вызовы на короткие и комбинацию call/ret на jmp.
При желании ещё ужать размер за счёт скорости к -Os можно добавить -mcall-prologues.
p.s. IAR действительно даёт более компактный код, но не в два раза точно. И в полтора врядли.