Перейти к содержанию
    

Что же такого...
Глобальную за локальной не видать. А локальная не используется, вот и выкинул...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глобальную за локальной не видать. А локальная не используется, вот и выкинул...

Кого? Он жеж глобальную по отношению к циклу и выкинул.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кого? Он жеж глобальную по отношению к циклу и выкинул.

Если объявить

int i=0, j=0;

, то тут понятно, что объявлено две переменные. А если сделать то же самое в инициализации цикла for:

for (int i=0, j=0;...)

, то догадаться уже сложнее :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глобальную за локальной не видать. А локальная не используется, вот и выкинул...

Точняк!

И даже больше локальная переменная внутри тела цикла не 32-битная, а 8-ми.

Так вот всё будет однозначно:

        uint32_t data;
        uint8_t msk;
        
        for (msk=0, data=0; msk<24; msk++)

 

Кого? Он жеж глобальную по отношению к циклу и выкинул.

А вас что, он не предупреждал:

main.c:28: warning: 'data' may be used uninitialized in this function

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вас что, он не предупреждал:

В том и дело, что если инициализировать и в начале и в цикле, предупреждения не будет, но овнокод тот же.

 

, то догадаться уже сложнее :)

Вот! Компилер живет своей жизнью, и надо его попросить сделать правильный код. Может, денег хочет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да ладно! Он честно ругнулся - вы игнорировали.

Ход его рассуждений тоже понять можно, раз уж программисту неважна эта переменная (её значеие),

то я забью на неё и связанное с ней биг-болт:)

 

В том и дело, что если инициализировать и в начале и в цикле, предупреждения не будет, но овнокод тот же.

В том и дело что в цикле Вы инитите уже другую локальную переменную с тем же именем.

По идее warning по отношению ко внешней относительно цикла переменной должен бы был остаться... Похоже на багу в этой версии avr-gcc 4.3.3.

 

Проверил на 4.4.3 - уже пофиксили - даёт warning.

 

Так-что не надо катить бочку на святое! :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоже понять можно, раз уж программисту неважна эта переменная (её значеие),

то я забью на неё и связанное с ней биг-болт:)

Дык низзя жеж понять - магическая запятая - и все пропало ©!!! Давайте тогда ваще все выкинем(б), даже если(!) есть обращения к volatile - и... короче,ето багофича, как ея правильно сформулировать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что сказать, переходите на версию посвежее ...

повторюсь - на avr-gcc 4.4.3 всё пучком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это клёновская?

 

Нет это атмеловская.

http://www.atmel.com/dyn/resources/prod_do...2.win32.x86.exe

 

К ней правда какой то древний binutils прикручен (не весь древний, что характерно).

Я собрал для себя из 2 - компилятор и avr-libc от avr-toolchain-installer а всё остально от WinAVR.

 

Клён уже скачет впереди планеты всей на gcc-4.6.0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот! Компилер живет своей жизнью, и надо его попросить сделать правильный код. Может, денег хочет?

Дык, кто ж не хочет? :)

На самом деле, я тоже не сообразил, что там новая локальная переменная образуется:) Теперь бум знать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..это атмеловская.

http://www.atmel.com/dyn/resources/prod_do...2.win32.x86.exe

 

К ней правда какой то древний binutils прикручен (не весь древний, что характерно).

Ошибся я с выводами в прошлый раз, это не binutils в тулчейне старый а coreutils.

 

Судя по всему, они используют этот раритет:

http://gnuwin32.sourceforge.net/packages/coreutils.htm

 

А есть гораздо (на 6 лет) свежее:

http://ftp.gnu.org/gnu/coreutils/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как заставить компилятор помещать в elf-файл полные пути к исходникам для отладки "по коду"? по умолчанию туда суются относительные пути от корня проекта и в итоге при определенном стечении обстоятельств отладчик "находит" не те исходники...

отладочная информация формата dwarf-2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасите мудрым советом, ибо не знаю куда копать :(

 

Несколько проектов собираются правильно и без ошибок с любым уровнем оптимизации (s, 0-3) на всех доступных мне компах (включая виртуальные; WinAVR везде одинаковый), но не собираются с оптимизацией по размеру (s) на основном рабочем ноуте, хотя раньше собирались (на нём и написаны были, собственно).

 

Makefile стандартный, созданный софтинкой MFile.

 

Ошибка:

-------- begin --------

avr-gcc (WinAVR 20100110) 4.3.3

Copyright © 2008 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

 

Compiling C: main.c

avr-gcc -c -mmcu=atmega8535 -I. -gdwarf-2 -DF_CPU=7372800UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -ffunction-sections -Wa,-adhlns=./main.lst -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o

In file included from main.h:10:

c:/winavr/lib/gcc/../../avr/include/avr/interrupt.h:38:20: error: calling fdopen: No such file or directory

In file included from main.h:12:

c:/winavr/lib/gcc/../../avr/include/avr/pgmspace.h:82:20: error: calling fdopen: No such file or directory

In file included from main.h:13:

c:/winavr/lib/gcc/../../avr/include/avr/eeprom.h:38:20: error: calling fdopen: No such file or directory

make.exe: *** [main.o] Error 1

 

> Process Exit Code: 2

> Time Taken: 00:00

Куда копать, что и где могло поломаться? Переустановка WinAVR ничего не дала.

WinAVR действительно установлен в C:\WinAVR, пути к файлам правильные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

WinAVR действительно установлен в C:\WinAVR, пути к файлам правильные.
Возможно на других компах установлена другая версия программ из тех, что лежат в WinAVR/utils и путь к этой другой версии прописан в path первым. Переименуйте эту папку, если компиляция будет продолжать проходить - ищите, откуда берутся эти утилиты и копируйте их на "больной" комп. Или наоборот - найдите, откуда эти утилиты берутся на "больном" и уберите этот путь из path.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...