реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> AVR Studio vs IAR Embedded Workbench vs GCC, К чему привыкать то?
AHTOXA
сообщение May 20 2010, 09:36
Сообщение #31


фанат дивана
******

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



Цитата(MrYuran @ May 20 2010, 14:48) *
Неиспользованные секции не линкуются

.. при передаче линкеру ключа --gc-sections.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2010, 10:23
Сообщение #32


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(demiurg_spb @ May 20 2010, 12:32) *
Это как раз оно.
Да, да, да.
Но только для C. С плюсами не работает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 20 2010, 11:16
Сообщение #33


неотягощённый злом
******

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



Цитата(Сергей Борщ @ May 20 2010, 14:23) *
Но только для C. С плюсами не работает.
Ну тут уж... что уж..


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 20 2010, 14:21
Сообщение #34


I WANT TO BELIEVE
******

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



Цитата
Это как раз оно.
Да, да, да.
Нет. Не оно. Это он считает, что каждый модуль это вся программа и ничего больше на свете нет. Для того, чтобы тут всё работало - нужно самому всё запихать в один большой файл и скомпилить. А так, связи с main он не определяет sad.gif. Но таки да, исправно выбрасывает то, что не используется в пределах модуля.

Эксперимент: timer.c описывает функцию get_timer_ticks() которая возвращает тики таймера. Сама переменная тиков объявлена как static volatile и щёлкает по прерыванию.
Из main.c в main() делаем вызов t = get_timer_ticks(); компилим с -fwhole-program. О ужас, проект не линкуется! main.o хочет символ, которого нет! get_timer_ticks благополучно выбросили, потому что модулю timer.c эта функция не нужна(там то она не используется нигде);

Так что - не то sad.gif

А в техасовском компиляторе просто сказка! Там ещё есть несколько вариантов на выбор(ну типа чтоб без фанатизма или всё подряд удалял). Даа, хороший компилятор. Только уж оооочень долго он работает если все оптимизации включить. А ещё памяти отхавывает с пол гига(на приличном исходнике разумеется). Но оптимизирует зато чётко.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2010, 19:20
Сообщение #35


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sigmaN @ May 20 2010, 17:21) *
Нет. Не оно. Это он считает, что каждый модуль это вся программа и ничего больше на свете нет. Для того, чтобы тут всё работало - нужно самому всё запихать в один большой файл и скомпилить.
Достаточно передать gcc на вход все исходные файлы сразу (не поодиночке) и на выходе получать сразу .elf, без вызова линкера. Когда разбирался - гугля по -fwhole-program давала достаточно информации. Если память не изменяет - к нему в комплекте предлагался еще какой-то ключик.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 20 2010, 21:05
Сообщение #36


I WANT TO BELIEVE
******

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



ааа эээ мм.. как это без линкера? Честно говоря даже не думал что так можно... blink.gif
А как он определит ну там entry point, я не знаю... все эти дела ведь линкер решает. Погуглю обязательно!

Да, -fwhole-program + -combine + передать все файлы за один раз. На выходе всё-же не .elf по-моему, а .o файл.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение May 21 2010, 05:43
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Честно говоря не совсем понимаю зачем это вам?

Насколько я понимаю, вы можете из нескольких C файлов один и по include сделать. Только зачем всё в одну кучу валить?
Наоборот раздельная компиляция - то что надо. Некоторые даже ошибки выявляются.

Если только, чтобы компилятор выкидывал процедуры неиспользуемые, то это можно разными путями обойти.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 06:45
Сообщение #38


Беспросветный оптимист
******

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



Цитата(SasaVitebsk @ May 21 2010, 09:43) *
Честно говоря не совсем понимаю зачем это вам?

Оптимизация лучше.
Например, функции, описанные за пределами модуля, не могут инлайниться.
А иногда очень хочется, особенно в прерываниях.
А описание в одном модуле не всегда соответствует логике и структуре проекта.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 21 2010, 07:15
Сообщение #39


фанат дивана
******

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



Цитата(MrYuran @ May 21 2010, 12:45) *
Оптимизация лучше.

Ха! И это говорит человек, у которого осталось свободным пол-флеша? biggrin.gif
Я согласен с SasaVitebsk. Топикстартеру надо сначала изучить предмет (компилятор), все ключи, нюансы. А уже потом, если в этом останется необходимость, задумываться о супер-оптимизации.
sigmaN, для выбрасывания неиспользуемого кода/данных в gcc есть ключи компилятора -ffunction-sections -fdata-sections и линкера --gc-sections. Мне показалось, что вы это просмотрели.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 07:27
Сообщение #40


Беспросветный оптимист
******

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



Цитата(AHTOXA @ May 21 2010, 11:15) *
Ха! И это говорит человек, у которого осталось свободным пол-флеша? biggrin.gif

Оптимизация, как известно, палочка о двух концах - размер/быстродействие.
Хотя, я с некоторых пор тоже не особо заморачиваюсь.
Например, в реализации FreeModbus в прерывании УАРТа вызывается функция обработки через указатель laughing.gif
и ничего... на скорости 115200 валит 100 регистров в секунду за милую душу

Но всё равно, когда замечаешь разницу относительно ИАРа, это немного нервирует maniac.gif
Видимо, у ИАРа просто оптимизация более адаптивная и многопроходная, а GCC-шному компилятору надо по месту объяснять, что от него требуется.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 21 2010, 07:40
Сообщение #41


фанат дивана
******

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



Цитата(MrYuran @ May 21 2010, 13:27) *
и ничего... на скорости 115200 валит 100 регистров в секунду за милую душу

Вот именно! Успевает - значит порядок. Не успевает - профилировка и оптимизация. Правда со времён i8051 не припоминаю, чтоб они понадобилисьsmile.gif

Цитата
Но всё равно, когда замечаешь разницу относительно ИАРа, это немного нервирует maniac.gif

Это не проблема, надо просто снести ИАР smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 07:46
Сообщение #42


Беспросветный оптимист
******

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



Цитата(AHTOXA @ May 21 2010, 11:40) *
Это не проблема, надо просто снести ИАР smile.gif

Дык, уже smile.gif
только что попробовал -fwhole-program на mspgcc, обругался насчёт анрекогнайзед опшн
ну и хрен с ним пускай...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 21 2010, 08:57
Сообщение #43


неотягощённый злом
******

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



Цитата(SasaVitebsk @ May 21 2010, 09:43) *
Честно говоря не совсем понимаю зачем это вам?

Когда нужно впихнуть невпихуемое - то это отличный вариант.
Пример из жизни: c 16Кб хорошо оптимизированной программы удалось выиграть ещё около 500Байт - и это было решающим фактором.

Цитата
Насколько я понимаю, вы можете из нескольких C файлов один и по include сделать. Только зачем всё в одну кучу валить?

Инклюдить всё - это как-то через одно место ИМХО.
Зачем делать через Ж, когда компилятор предоставляет стандартное решение?
Цитата
Наоборот раздельная компиляция - то что надо. Некоторые даже ошибки выявляются.

Сообщения об ошибках выдаются точно также как и при раздельной компиляции.
Так что никакой разницы здесь нет.
И мне даже кажется что так компиляция происходит быстрее.

Цитата(MrYuran @ May 21 2010, 11:46) *
Дык, уже smile.gif
Отлично!

Цитата
только что попробовал -fwhole-program на mspgcc, обругался насчёт анрекогнайзед опшн

Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 09:04
Сообщение #44


Беспросветный оптимист
******

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



Цитата(demiurg_spb @ May 21 2010, 12:57) *
Можете сами попробовать пересобрать msp-gcc с этой функцией или попросить Клёна об этом - он ведь у нас Великий Турук-Макто:-)

msp в его меню не входит... crying.gif
я, правда, тоже уже на Cortex M0 заглядываюсь потихоньку
Надо бы ещё глянуть, что в мспжцц4 насочиняли..
Однако, тема про АВР - вот там всё должно быть в ногу со временем.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 21 2010, 14:38
Сообщение #45


I WANT TO BELIEVE
******

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



Да и инлайны тоже. Приходится писать код в хидерах. И если это функци инициализации таймера в три строки - то инлайн рулит, т.к. вызывается она один раз и размер кода меньше пролога/эпилога. В тоже время всё красиво: таймер в timer.c, АЦП в adc.c. Конечно можно навалить всё в одну большую кучу в файл аля main.c, но это не наш метод ))

Кстати говоря метод -ffunction-sections -fdata-sections и линкера --gc-sections мне кажется каким-то слегка не правильным.... Должен компилятор без вопросов сам всё выбрасывать. Что это за секции, линкеры.....


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01479 секунд с 7
ELECTRONIX ©2004-2016