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

Проблема с оптимизатором GCC.

Добавлено: Пт фев 21, 2014 18:56:35
Shurf
Знающие, объясните, почему при компиляции начисто выкидывается display=i из 109 строки файла "termo.c". Написал такой "вывод" содержимого переменной "display" на трехразрядный восьмисегментник, хотел полюбоватся, как он в главном while циферки перебирает, а он только показывает то, что было при инициализации переменной, а строку присваивания с display просто игнорирует. Схему в протеусе и проект от АВР Студии 4 прилагаю.

Re: Проблема с оптимизатором GCC. Перенесите пожалуйста в AV

Добавлено: Пт фев 21, 2014 19:30:15
blackx
Недоприложили вы чего-то :)

Re: Проблема с оптимизатором GCC.

Добавлено: Пт фев 21, 2014 19:37:56
Shurf
Извиняюсь, пытался тему перенести) Ан не удалить никак)-

Re: Проблема с оптимизатором GCC.

Добавлено: Пт фев 21, 2014 20:12:30
urry

Re: Проблема с оптимизатором GCC.

Добавлено: Пт фев 21, 2014 20:32:21
Shurf
Что-то я в растерянности. Раньше с подобными программами (раза 2) проблем не было, а сейчас - как об стену горох, никаких операций с глобальной переменной display программа не производит, потому . Чувствую, ошибка глупая и очень простая, но где она?

Re: Проблема с оптимизатором GCC.

Добавлено: Сб фев 22, 2014 00:20:13
Shurf
Итак, на одном хорошем форуме молодых электронщиков ответили: "Потому что переменная display больше нигде не используется.. Ты ей значение присваиваешь и всё.. Вот оптимизатор её и выкидывает..

Надо писать volatile static uint8_t display = 254; в начале." Вот и все)

Re: Проблема с оптимизатором GCC.

Добавлено: Ср мар 26, 2014 23:17:51
watchmaker
Кстати, у меня одна программа прекрасно компилировалась и запускалась в WinAVR 2006 года. А поставил последний за 2010 год и обновил GCC - не пошла, пока на двух переменных не выставил тэг volatile.

Re: Проблема с оптимизатором GCC.

Добавлено: Чт мар 27, 2014 08:49:05
ИС-пытатель
Говорю сразу, что код не смотрел.
Но с большой вероятностью, что переменная не объявлена volatile, а где-то в прерывании используется.

Re: Проблема с оптимизатором GCC.

Добавлено: Пт мар 28, 2014 19:11:28
ИС-пытатель
А вот теперь посмотрел код. Все в точности, как я сказал. У тебя в прерывании от таймера используется твоя переменная. Поскольку в прерывании она не изменяется, а только грузится ее значение, то компилятор берет по умолчанию то, которым ты ее проинициализировал. Т.е. 254. А в мейне она меняется. Объяви переменную с пометкой volatile - и будет тебе счастье