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

 
 
> AVR GCC и оптимизация
belen
сообщение Apr 23 2011, 07:24
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Как отключить (включить) оптимизацию в WIN AVR выражением препроцессора по аналогии с #pragma opt-/+ в Code Vision?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 13)
Сергей Борщ
сообщение Apr 23 2011, 07:45
Сообщение #2


Гуру
******

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



QUOTE (belen @ Apr 23 2011, 10:24) *
Как отключить (включить) оптимизацию в WIN AVR выражением препроцессора по аналогии с #pragma opt-/+ в Code Vision?
Никак. А зачем? Чаще всего такая "необходимость" возникает из-за некорректно написанной программы, когда оптимизатор выкидывает ненужные выражения. Покажите свой код.


--------------------
На любой вопрос даю любой ответ
"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
belen
сообщение Apr 23 2011, 15:17
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Немного странно, один компилятор считает это полезным, а другой нет?
Не всегда сразу удается корректно написать код. Для этого и существует отладка.
А когда при отладке видно не всё из-за оптимизации, но она необходима для определенных
функций, например delay(), тогда отключение её для фрагмента кода может быть очень полезным.
Разве не так?
Go to the top of the page
 
+Quote Post
smalcom
сообщение Apr 23 2011, 19:33
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



оптимизация задаёца компилятору, а не препроцессору. Есть ключи -O, -g: man gcc
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 24 2011, 08:05
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Лечить надо не оптимизатор, а функцию. А ответ на ваш вопрос есть в документации на gcc :
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
http://gcc.gnu.org/onlinedocs/gcc/Function...on-Pragmas.html
Go to the top of the page
 
+Quote Post
belen
сообщение Apr 25 2011, 09:05
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Цитата(gotty @ Apr 24 2011, 11:05) *
Лечить надо не оптимизатор, а функцию. А ответ на ваш вопрос есть в документации на gcc...

Лечении оптимизатора и управлении им - это разные вещи.

Я работаю с GCC уже не первый год и знаю какие флаги изменяют режим оптимизации, но режим оптимизации прменяется ко всему файлу(ам).
Когда же я узнал, что CodeVision имеет прагму, отключающую режим внутри кода, я решил еще раз проверить хелп на GCC, но, к сожалению для себя, ничего не нашел. Вот я и решил спросить на форуме, надеясь, что ошибаюсь.

На мой взгляд, отключение оптимизации на фрагменте кода - это очень полезная вещь.

Всем спасибо за участие.
Go to the top of the page
 
+Quote Post
ek74
сообщение Apr 25 2011, 11:55
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351



Цитата(gotty @ Apr 24 2011, 12:05) *

Цитата(belen @ Apr 25 2011, 13:05) *
Я работаю с GCC уже не первый год и знаю какие флаги изменяют режим оптимизации, но режим оптимизации прменяется ко всему файлу(ам).

__attribute__ ((optimize("Os")))
Цитата
optimize
The optimize attribute is used to specify that a function is to be compiled with different optimization options than specified on the command line. Arguments can either be numbers or strings. Numbers are assumed to be an optimization level. Strings that begin with O are assumed to be an optimization option, while other options are assumed to be used with a -f prefix. You can also use the `#pragma GCC optimize' pragma to set the optimization options that affect more than one function. See Function Specific Option Pragmas, for details about the `#pragma GCC optimize' pragma.

This can be used for instance to have frequently executed functions compiled with more aggressive optimization options that produce faster and larger code, while other functions can be called with less aggressive options.

Работает с начиная с версии GCC 4.4.
Go to the top of the page
 
+Quote Post
belen
сообщение Apr 28 2011, 09:10
Сообщение #8





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Цитата(ek74 @ Apr 25 2011, 14:55) *
__attribute__ ((optimize("Os")))

Работает с начиная с версии GCC 4.4.


Спасибо ek74. У меня GCC 4.3.3. Надо обновить. Замечательно.
Go to the top of the page
 
+Quote Post
belen
сообщение Apr 28 2011, 12:13
Сообщение #9





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Странно, но у меня нет возможности редактировать свои сообщения. Не понял, что, для этого нужны особые привилегии?
Go to the top of the page
 
+Quote Post
ek74
сообщение Apr 28 2011, 13:50
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 4-08-05
Из: г. Саратов
Пользователь №: 7 351



Цитата(belen @ Apr 28 2011, 16:13) *
Странно, но у меня нет возможности редактировать свои сообщения. Не понял, что, для этого нужны особые привилегии?

Правка личных тем и сообщений
Go to the top of the page
 
+Quote Post
belen
сообщение Apr 28 2011, 21:28
Сообщение #11





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Ясссно, привилегию надо заслужить.

И снова про gcc, точнее про WinAVR. У автора WinAVR, похоже, руки не доходят обновлять gcc. Надо самому.
Хочу подстраховаться. Подскажите, достаточно ли будет заменить файл avr-gcc.exe копией нового gcc 4.xx в директории ...\WinAVR-20100110\bin\ ?
И какую версию gcc сейчас лучше выбрать?
Go to the top of the page
 
+Quote Post
msalov
сообщение Apr 29 2011, 05:30
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(belen @ Apr 29 2011, 00:28) *
Подскажите, достаточно ли будет заменить файл avr-gcc.exe копией нового gcc 4.xx в директории ...\WinAVR-20100110\bin\ ?
недостаточно. Лучше пересоберите toolchain целиком.
Go to the top of the page
 
+Quote Post
belen
сообщение Apr 29 2011, 07:37
Сообщение #13





Группа: Новичок
Сообщений: 8
Регистрация: 9-03-09
Пользователь №: 45 861



Цитата(gotty @ Apr 29 2011, 08:30) *
...пересоберите...


Что это значит? Можно поподробнее?
Go to the top of the page
 
+Quote Post
msalov
сообщение May 9 2011, 11:12
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(belen @ Apr 29 2011, 10:37) *
Что это значит? Можно поподробнее?

Building and Installing the GNU Tool Chain
How To: Set up an AVR-GCC build environment from scratch.
Go to the top of the page
 
+Quote Post

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

 


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


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