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

 
 
> Как вразумить avr-gcc ?, Компилятор заоптимизировал volatile переменную
impatt
сообщение Oct 23 2006, 08:55
Сообщение #1


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

Группа: Validating
Сообщений: 169
Регистрация: 10-11-04
Из: Челябинск
Пользователь №: 1 088



Пробую avr-gcc-3.3.1 и avr-gcc-4.1.1.
C-шный текст прост:
в цикле проверяется значение переменной и если оно, скажем, не ноль, то цикл продолжает крутиться. Если бы переменная не была изменяемая извне (прерыванием), то тогда бы такой код совершенно надёжно был бы вечно зацикленным. Однако прерывание меняет переменную. Но компилятор почему-то даже объявленную переменную как volatile, засасывает в регистры и потом, в цикле, проверяет содержимое регистров, куда ты была засосана. А прерывание, как все нормальные функции, берёт переменную в ОЗУ по её адресу, меняет, и кладёт назад. таким образом, цикл не почувстует изменение переменной, что не есть гут.
Если я ставлю отпимизацию -O0, то всё ОК, ошибки нет. Если -O2, -Os, то всё, неправильно - заоптимизируется до регистров. Оставлять оптимизацию -O0 - не кошерно, не годится.
Что сделать, чтобы компилятор перестал игнорировать спецификатор(модификатор) volatile ?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Oct 23 2006, 09:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(impatt @ Oct 23 2006, 16:55) *
Пробую avr-gcc-3.3.1 и avr-gcc-4.1.1...
...Что сделать, чтобы компилятор перестал игнорировать спецификатор(модификатор) volatile ?
Спасибо.
Честно говоря, не имел дело с gcc, но в ИАР данная проблема решается префиксом __root. Может быть в gcc есть аналог?


--------------------
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2006, 09:18
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(prottoss @ Oct 23 2006, 12:02) *
данная проблема решается префиксом __root. Может быть в gcc есть аналог?

Вообще-то эта проблема решается именно volatile, __root это из другой оперы.
То, что volatile не сработал - это криминально :-(.
Цитата
Что сделать, чтобы компилятор перестал игнорировать спецификатор(модификатор) volatile

Попробуйте минимизировать потери от отключения оптимизации изменив оптимизацию не глобально, а
#pragma на конкретный кусочек текста.


Цитата(impatt @ Oct 23 2006, 12:10) *
Коллега, например, сидит на IAR-е, так у него прога (операционная система с полумегабайтной страничной памятью на Atmega128) не работает, пока не поставит оптимизацию в "0". Я вот радовался, что gcc стабильнее и правильнее, но, вижу, gcc тоже не без греха.

Не 'без греха' гораздо чаще писатель не явно выражающий свою мысль и зачастую подавляющий
warnings/notes. Грехи многих компиляторов чаще заключаются в излишней молчаливости по отношению
к местам в которых они 'сомневаются'.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- impatt   Как вразумить avr-gcc ?   Oct 23 2006, 08:55
|- - impatt   Цитата(prottoss @ Oct 23 2006, 12:02) Цит...   Oct 23 2006, 09:10
- - aesok   GCC не игнорирует volatile!!! Ошибка в...   Oct 23 2006, 09:07
|- - impatt   Цитата(aesok @ Oct 23 2006, 12:07) GCC не...   Oct 23 2006, 09:19
|- - aesok   SPECPREFIX volatile uint8_t *debugPushCursor; Есл...   Oct 23 2006, 09:32
||- - impatt   Цитата(aesok @ Oct 23 2006, 12:32) SPECPR...   Oct 23 2006, 09:48
|- - zltigo   Цитата(impatt @ Oct 23 2006, 12:19) Показ...   Oct 23 2006, 09:35
|- - klen   Вот результат компиляции по мотивам приведеннго вы...   Oct 23 2006, 09:51
|- - impatt   Цитата(klen @ Oct 23 2006, 12:51) Вот рез...   Oct 23 2006, 10:07
|- - impatt   Цитата(klen @ Oct 23 2006, 12:51) Вот рез...   Oct 23 2006, 10:47
|- - aesok   Что генерирует GCC смогу посмотреть вечером. (точ...   Oct 23 2006, 11:45
|- - Сергей Борщ   Цитата(impatt @ Oct 23 2006, 13:47) Польз...   Oct 23 2006, 11:56
|- - impatt   Цитата(Сергей Борщ @ Oct 23 2006, 14:56) ...   Oct 24 2006, 02:06
|- - zltigo   Цитата(impatt @ Oct 24 2006, 05:06) Тепер...   Oct 24 2006, 07:11
|- - impatt   Цитата(zltigo @ Oct 24 2006, 10:11) Вещь ...   Oct 24 2006, 07:54
- - Andy Great   ЦитатаТеперь вопрос-завершение: откуда узнаются та...   Oct 24 2006, 08:06


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

 


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


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