Страница 1 из 1

AtmelStudio6.1 компилирует код на 50% больше!

Добавлено: Пт май 24, 2013 16:17:55
aurifer
Открываю проект, сделанный на Studio 5, в Studio 6 . Ничего не меняя, сразу нажимаю "Build (имя проекта)". А он выдаёт ошибку "переполнение памяти контроллера на 32%"! Попробовал изменить параметр оптимизации кода(Toolchain>AVR/GNU C Compiler>optimization>optimization level), максимум чего смог добиться - превышение памяти на 74 байта!
Изображение
Пробовал в настройках проекта Build>Build Artifact>Artifact Type изменить "Executable" на "Static Library", проект компилируется без проблем, но не генерируется HEX файл(изменяется/создаётся файл с расширением ".а" ). Не совсем понимаю до конца, для чего этот параметр.
Изображение
Как такое побороть? Ведь сама программа,скомпилированная ранее, трудится в контроллере без проблем. Можно попробовать Studio 5 установить, но такая проблема появлялась и у другого человека на 5-ой. Т.е. придётся искать подходящую версию.

Re: AtmelStudio6.1 компилирует код на 50% больше!

Добавлено: Пт май 24, 2013 17:41:06
Kavka
Смотря что у вас там в исходниках.
Может решиться опциями компилятора, может ещё какими мерами.
Если проект не большой и не жалко публично засветить - закиньте его сюда, посмотрим.

Re: AtmelStudio6.1 компилирует код на 50% больше!

Добавлено: Пт май 24, 2013 17:47:20
aurifer
Проект не мой. Вот исходники.

Re: AtmelStudio6.1 компилирует код на 50% больше!

Добавлено: Пт май 24, 2013 21:31:44
Kavka
Видать, у новых версий компиляторов изменились алгоритм принятия решения о включении кода вместо его вызова (inlining).

Добавьте
__attribute__ ((noinline))
ко всем определениям calculateColor и rndColor
вот так
__attribute__ ((noinline)) static uint8_t calculateColor(uint8_t from, uint8_t to, uint16_t tm);
__attribute__ ((noinline)) static uint8_t rndColor()

У меня получилось 974 вместо 1070 байт.

Да, и не забудьте выбрать в качестве конфигурации "Release" в настройках проекта.
И проверьте оптимизацию: -Os

Re: AtmelStudio6.1 компилирует код на 50% больше!

Добавлено: Сб май 25, 2013 05:05:49
aurifer
Спасибо, всё получилось. Сам ни когда бы не догадался...