MrYuran 27 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба работает ли в таком виде.. В таком чё-то никак... Немного изменил описание структуры - вот: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба Эврика! Теперь работает... а я использовал всегда именованные струтуры... потому и неработало))) Премного благодарен уважаемый... я б об этом думал бы в последнюю очередь... еслиб догадался))) Теперь CodeBlocks для меня стала нормальной средой, а не просто бесплатным продуктом))) Изменено 6 октября, 2008 пользователем Григорий2000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Подскажите, кто-нибудь пользуется автогенерацией makefile или все используют свой внешний makefile ? Что то у меня не получилось скомпилировать проект из неодного исходника, с одним компилирует а с неодним неполучается - линкер берет только один объектный файл, и , соответственно, пишет что ненайдены внешние обьекты(функции/переменные). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Поставьте в настройках галочки на все предупреждения, тогда будет видно, из-за чего не линкует. Ещё, если проект разложен по папкам, надо либо прописывать компилятору и линкеру пути для поиска к каждой папке, но это лениво, я прописываю путь к корню проекта, а в исходниках прописываю полные относительные пути к хедерам, типа #include "../utils/utils.h" Таким образом работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба варнинги вывел... появились предупреждения о коментах типа с++ в файлах С90 и т.п компиляция проходит, хедеры все доступны, файлы для чистоты эксперимента свалил в одну папку. не вижу что-бы линкеру передавались все файлы проекта, передается только один(как нибудь можно вывести в консоль запуск линкера с ключами, что-бы посмотреть как это делает среда?) и естественно если он один у линкера - ошибки - нет обьектов объявленных там как extern или внешних функций. Compiling: ..\Lib\DELAY.C Compiling: ..\Lib\buffer.c ..\Lib\buffer.c:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\buffer.c:2:1: warning: (this will be reported only once per input file) In file included from ..\Lib\buffer.c:18: ..\Lib\/buffer.h:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/buffer.h:2:1: warning: (this will be reported only once per input file) In file included from ..\Lib\buffer.c:21: ..\Lib\/avrlibdefs.h:2:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/avrlibdefs.h:2:1: warning: (this will be reported only once per input file) ..\Lib\buffer.c: In function 'bufferGetAtIndex': ..\Lib\buffer.c:101: warning: ISO C90 forbids mixed declarations and code ..\Lib\buffer.c: In function 'bufferIsNotFull': ..\Lib\buffer.c:135: warning: ISO C90 forbids mixed declarations and code Compiling: ..\Lib\ds18b20.c ..\Lib\ds18b20.c:3:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\ds18b20.c:3:1: warning: (this will be reported only once per input file) In file included from ..\Lib\ds18b20.c:5: ..\Lib\/..\Lib\1WIRE.H:7:25: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/..\Lib\1WIRE.H:7:25: warning: (this will be reported only once per input file) In file included from ..\Lib\ds18b20.c:6: ..\Lib\/ds18b20.h:11:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\/ds18b20.h:11:1: warning: (this will be reported only once per input file) Compiling: main.c In file included from main.c:6: ..\Lib\ds18b20.h:11:1: warning: C++ style comments are not allowed in ISO C90 ..\Lib\ds18b20.h:11:1: warning: (this will be reported only once per input file) main.c:14:1: warning: C++ style comments are not allowed in ISO C90 main.c:14:1: warning: (this will be reported only once per input file) Compiling: ..\Lib\1WIRE.C Linking console executable: bin\Debug\testProject.elf obj\Debug\Lib\ds18b20.o: In function `ds18b20Init': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:91: undefined reference to `w1_rom_search' obj\Debug\Lib\ds18b20.o: In function `ds1820StartConversion': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:139: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:151: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:154: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:157: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:160: undefined reference to `w1_command' obj\Debug\Lib\ds18b20.o: In function `ds1820ReadTemperature': C:\work\TestFolder\testProject/..\Lib\ds18b20.c:199: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:209: undefined reference to `w1_bit_io' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:218: undefined reference to `w1_reset' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:231: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:236: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:242: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:247: undefined reference to `w1_command' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:254: undefined reference to `w1_byte_rd' C:\work\TestFolder\testProject/..\Lib\ds18b20.c:255: undefined reference to `w1_byte_rd' Process terminated with status 1 (0 minutes, 1 seconds) 15 errors, 18 warnings где ошибка?)) в каких настройках Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Внизу есть вкладка Build Log, в неё можно вывести подробный лог со всеми командами, ключами и т.д. и даже сохранить его в файл. В настройках где-то есть соответственная галка. Вот пример: X3_amplifier_build_log.html А вот нужные галки: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 (изменено) · Жалоба Да, спасибо, уже нашел где это включить... и, как оказалось, линкеру передаются все файлы. Однако, немогу понять во первых почему линкуется другим файлом, обычно компилер и линкер - один и тот-же файл avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c ds18b20.c -o obj\Debug\ds18b20.o avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c main.c -o obj\Debug\main.o avr-gcc.exe -mmcu=atmega128 -Wall -DF_CPU=16000000UL -mmcu=atmega128 -g -Os -g -IC:\work\TestFolder\testProject\ -IC:\WinAVR\avr\include -c 1WIRE.C -o obj\Debug\1WIRE.o avr-g++.exe -Lobj\Debug -Lobj\Debug\Lib -LC:\WinAVR\avr\lib -o bin\Debug\testProject.elf obj\Debug\DELAY.o obj\Debug\buffer.o obj\Debug\ds18b20.o obj\Debug\main.o obj\Debug\1WIRE.o -mmcu=atmega128 -Wl,-Map=bin\Debug\testProject.elf.map,--cref obj\Debug\ds18b20.o: In function `ds1820StartConversion': C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:157: undefined reference to `w1_command' C:\work\TestFolder\testProject/ds18b20.c:160: undefined reference to `w1_command' obj\Debug\ds18b20.o: In function `ds1820ReadTemperature': C:\work\TestFolder\testProject/ds18b20.c:199: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:209: undefined reference to `w1_bit_io' C:\work\TestFolder\testProject/ds18b20.c:218: undefined reference to `w1_reset' C:\work\TestFolder\testProject/ds18b20.c:247: undefined reference to `w1_command' C:\work\TestFolder\testProject/ds18b20.c:254: undefined reference to `w1_byte_rd' C:\work\TestFolder\testProject/ds18b20.c:255: undefined reference to `w1_byte_rd' obj\Debug\ds18b20.o: In function `ds18b20Init': C:\work\TestFolder\testProject/ds18b20.c:91: undefined reference to `w1_rom_search' Process terminated with status 1 (0 minutes, 1 seconds) 10 errors, 0 warnings и в принципе видно, что проблема только в этом файле. Интересен порядок использования файлов. изменение линкера результата не дало... проблема где-то в моих проектах, на тестовом проекте работает нормально Изменено 26 ноября, 2008 пользователем Григорий2000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Небольшой вопрос. Возможно ли чтоб по нажатию кнопки Run осуществлялось программирование контроллера? Сейчас я прошиваю контроллер через макрос в makefile ( т.е. в консоли пишу make prog, где prog это имя макроса ). Частично решил проблему с помощью Tools -> Configure tools... , но там нельзя назначить сочетания клавиш для автоматического запуска, да и кнопка Run оказалась незадействованной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Привет, Григорий2000! C:\work\TestFolder\testProject/ds18b20.c:139: undefined reference to `w1_reset' Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 26 ноября, 2008 Опубликовано 26 ноября, 2008 · Жалоба Привет, Григорий2000! Глупый вопрос: а ты абсолютно уверен, что `w1_reset' и прочие ненаходимые линкером символы имеются в переданных ему для линковки модулях? Что на этот счет говорит nm? уверен на 220% я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба уверен на 220% я не понял в чем проблема, но все решилось простым образом. у меня в проекте были как с так и cpp файлы. как только я переименовал ds18b20 в cpp все скомпилировалось. разбираться в причине не стал, но был-бы признателен за пояснения произошедшего. и я совсем "некопенгаген" что такое nm..(простите мне мое невежество) Ответ тут получается очень простым. Если вы используете функции написанные на С в программе на С++, то её (функцию) необходимо обьявить как extern "C". Это всё надо так как компилятор С++ добавляет префиксы и постфиксы к именам всех функций что б различать перегруженные, а компилятор С - нет (как это называется по научному - извините не помню). Универсальный подход к такому вопросу такой: во все заголовочные файлы добавляйте такие макросы #ifndef SOME_HEADER_H #define SOME_HEADER_H #ifdef __cplusplus extern "C" { #endif // тут обьявлены функции #ifdef __cplusplus } #endif #endif //SOME_HEADER_H nm утилита из набора binutils для вывода всех символов, обьявленных в обьектном файле, например nm ds18b20.o выдаст список всех имён функций и не только в этом файле. Если вы откомпилируете один и тот же исходник компилятором С и С++, и посмотрите на имена функций - поймете разницу и почему линкер не находил функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба А линкер-то g++ используется или gcc? avr-g++.exe -Lobj\Debug -Lobj\Debug\Lib -LC:\WinAVR\avr\lib -o bin\Debug\testProject.elf obj\Debug\DELAY.o obj\Debug\buffer.o obj\Debug\ds18b20.o obj\Debug\main.o obj\Debug\1WIRE.o -mmcu=atmega128 -Wl,-Map=bin\Debug\testProject.elf.map,--cref obj\Debug\ds18b20.o: In function `ds1820StartConversion': Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grigory2000 0 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба C выводом обьявлений функций как #ifdef __cplusplus extern "C" { #endif все успешно линкуется. незапоминаю решения в котрых непонятен принцип действия. С этим ответом встало все на свои места... используется линкер g++(поумолчанию) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 18 декабря, 2008 Опубликовано 18 декабря, 2008 · Жалоба Вот не могу понять. Запускаю objdump из-под сабжа- что ни делаю, он дамп выдает в stderr. Наблюдаю в окне build вместо файла. Блин, мозг сломал... не понимаю Подскажите, плз, что делать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 18 декабря, 2008 Опубликовано 18 декабря, 2008 · Жалоба objdump 2>&1 тоже не помогает? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться