|
|
  |
AVR Studio vs IAR Embedded Workbench vs GCC, К чему привыкать то? |
|
|
|
May 20 2010, 14:21
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Это как раз оно. Да, да, да. Нет. Не оно. Это он считает, что каждый модуль это вся программа и ничего больше на свете нет. Для того, чтобы тут всё работало - нужно самому всё запихать в один большой файл и скомпилить. А так, связи с main он не определяет  . Но таки да, исправно выбрасывает то, что не используется в пределах модуля. Эксперимент: timer.c описывает функцию get_timer_ticks() которая возвращает тики таймера. Сама переменная тиков объявлена как static volatile и щёлкает по прерыванию. Из main.c в main() делаем вызов t = get_timer_ticks(); компилим с -fwhole-program. О ужас, проект не линкуется! main.o хочет символ, которого нет! get_timer_ticks благополучно выбросили, потому что модулю timer.c эта функция не нужна(там то она не используется нигде); Так что - не то  А в техасовском компиляторе просто сказка! Там ещё есть несколько вариантов на выбор(ну типа чтоб без фанатизма или всё подряд удалял). Даа, хороший компилятор. Только уж оооочень долго он работает если все оптимизации включить. А ещё памяти отхавывает с пол гига(на приличном исходнике разумеется). Но оптимизирует зато чётко.
--------------------
The truth is out there...
|
|
|
|
|
May 21 2010, 06:45
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(SasaVitebsk @ May 21 2010, 09:43)  Честно говоря не совсем понимаю зачем это вам? Оптимизация лучше. Например, функции, описанные за пределами модуля, не могут инлайниться. А иногда очень хочется, особенно в прерываниях. А описание в одном модуле не всегда соответствует логике и структуре проекта.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 07:15
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(MrYuran @ May 21 2010, 12:45)  Оптимизация лучше. Ха! И это говорит человек, у которого осталось свободным пол-флеша? Я согласен с SasaVitebsk. Топикстартеру надо сначала изучить предмет (компилятор), все ключи, нюансы. А уже потом, если в этом останется необходимость, задумываться о супер-оптимизации. sigmaN, для выбрасывания неиспользуемого кода/данных в gcc есть ключи компилятора -ffunction-sections -fdata-sections и линкера --gc-sections. Мне показалось, что вы это просмотрели.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 21 2010, 07:27
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(AHTOXA @ May 21 2010, 11:15)  Ха! И это говорит человек, у которого осталось свободным пол-флеша?  Оптимизация, как известно, палочка о двух концах - размер/быстродействие. Хотя, я с некоторых пор тоже не особо заморачиваюсь. Например, в реализации FreeModbus в прерывании УАРТа вызывается функция обработки через указатель и ничего... на скорости 115200 валит 100 регистров в секунду за милую душу Но всё равно, когда замечаешь разницу относительно ИАРа, это немного нервирует Видимо, у ИАРа просто оптимизация более адаптивная и многопроходная, а GCC-шному компилятору надо по месту объяснять, что от него требуется.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 08:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(SasaVitebsk @ May 21 2010, 09:43)  Честно говоря не совсем понимаю зачем это вам? Когда нужно впихнуть невпихуемое - то это отличный вариант. Пример из жизни: c 16Кб хорошо оптимизированной программы удалось выиграть ещё около 500Байт - и это было решающим фактором. Цитата Насколько я понимаю, вы можете из нескольких C файлов один и по include сделать. Только зачем всё в одну кучу валить? Инклюдить всё - это как-то через одно место ИМХО. Зачем делать через Ж, когда компилятор предоставляет стандартное решение? Цитата Наоборот раздельная компиляция - то что надо. Некоторые даже ошибки выявляются. Сообщения об ошибках выдаются точно также как и при раздельной компиляции. Так что никакой разницы здесь нет. И мне даже кажется что так компиляция происходит быстрее. Цитата(MrYuran @ May 21 2010, 11:46)  Дык, уже  Отлично! Цитата только что попробовал -fwhole-program на mspgcc, обругался насчёт анрекогнайзед опшн Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 21 2010, 09:04
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(demiurg_spb @ May 21 2010, 12:57)  Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-) msp в его меню не входит... я, правда, тоже уже на Cortex M0 заглядываюсь потихоньку Надо бы ещё глянуть, что в мспжцц4 насочиняли.. Однако, тема про АВР - вот там всё должно быть в ногу со временем.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|